سؤال

أنا أستخدم الأعمدة ، وعمل جهاز التحكم الخاص بي هو:

 class UserController(BaseController):

      def create(self):
           name = request.POST['name']
           email = request.POST['email']
           password = request.POST['password']
           ...

لكنني وجدت في Turbogears ، يمكنني أن أفعل مثل هذا:

 class UserController:

      def create(self, name, email, password):
           ...

كيف تفعل الشيء نفسه في الأعمدة؟


تحديث

لقد بحثت في Google ، وسألت في بعض المنتديات الأخرى ، لكن لم أحصل على الإجابة. لا أحد يعرف (أو يهتم به) مثل هذا السؤال؟

هل كانت مفيدة؟

المحلول

يبدو أنك تريد تقديم حجج إلى create() طريقة وحدة التحكم الخاصة بك المستمدة مباشرة من عناصر البيانات النشر. يمكنك القيام بذلك ، لكنه غشش إلى حد ما.

تتمثل أقصر طريقة للقيام بذلك - وهي طريقة هشة - في تحديد الإجراء مثل ذلك ، باستخدام متغيرات البيئة هذه كإجراء افتراضي للعمل.

class UserController(Base):
  def create(self, name=request.POST['name'], email=request.POST['email'], ...):
        ...

الشيء هو أنه على الرغم من أنه قد يبدو مرهقًا ، إلا أن الطريقة الأولى التي أظهرتها هي طريقة أفضل للقيام بذلك ، لأنها تمنحك مساحة أكبر للتعافي بأمان من تلك المتغيرات التي لا تتوقعها.

إذا كنت تشعر بالرغبة في الحصول على فظيعة حقًا ، فيمكنك دفع هذا المنطق إلى التوجيه. بيانات المنشور متوفرة بالفعل هناك ، ليس فقط بشكل مباشر ، لأن المنطق مثل هذا ينتمي إلى وحدة التحكم الخاصة بك. سوف تستخدم أ الطريقة الشرطية في الطرق, ، الذي يمنحك الوصول إليه environ[wsgi.input], ، التي تحتوي على بيانات النشر ، ثم استخراج البيانات المطلوبة من هناك ، وادفعها إلى match_dict القاموس ، والذي بدوره سيتيح لك إطعام postdata مباشرة إلى حجج عمل وحدة التحكم الخاصة بك. إليك قسم كتاب Pylons حول الوظائف الشرطية في Routing.py ، وهنا أ سؤال مماثل هنا على ذلك و اخر, ، والتي يجب أن تساعد إذا كنت تريد حقًا العمل مع wsgi.input مباشرة.

ومع ذلك ، بدلاً من أي من هذه الأشياء ، أود استخدام طريقتك الأصلية:

class UserController(BaseController):
    def create(self):
       name = request.POST['name']
       email = request.POST['email']
       password = request.POST['password']
       ...

من المؤكد أنه من الممكن تحليل بيانات النشر قبل أن تصل إلى وحدة التحكم الخاصة بك واتخاذ الإجراءات عليها قبل ذلك. ومع ذلك ، فإن النظر إلى البيانات النشر وتحديد ما يجب فعله به هو دور وحدة التحكم ، وليس دور الطرق أو دور الوسيطة. إذا قررت - على سبيل المثال - البدء في العبث بالبيانات البريدية في Routing.py ، فأنت تفقد بعض المزايا المربوطة بشكل فضفاض للأعمدة وإلى حد أصغر WSGI Shebang بالكامل.

أنت إرادة انظر وحدات تحكم Pylons التي تبدو هكذا ، على الرغم من:

class UserController(BaseController):
    def create(self, name, spam):
       ...

ومع ذلك ، في هذه الحالات ، تأتي قيم "الاسم" و "البريد العشوائي" من سلسلة الاستعلام (ومن خريطة الطرق) ، وليس من بيانات البريد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top