django - التقاط معلمات url في request.GET




rest (6)

أنا حاليا تحديد التعابير العادية من أجل التقاط المعلمات في عنوان url ، كما هو موضح في البرنامج التعليمي. كيف يمكنني الوصول إلى المعلمات من عنوان url كجزء من كائن HttpRequest ؟ My HttpRequest.GET حاليًا بإرجاع كائن QueryDict فارغ.

أود أن أتعلم كيفية القيام بذلك دون مكتبة حتى أتمكن من التعرف على Django بشكل أفضل.


أود مشاركة نصيحة قد توفر لك بعض الوقت.
إذا كنت تخطط لاستخدام شيء من هذا القبيل في ملف urls.py :

url(r'^(?P<username>\w+)/$', views.profile_page,),

والتي تعني أساسًا www.example.com/<username> . تأكد من وضعه في نهاية إدخالات عنوان URL ، لأنه بخلاف ذلك ، يكون عرضة للتعارضات مع إدخالات عنوان URL التي تتبع أدناه ، أي أن الوصول إلى أحدها سيعطيك الخطأ الجيد: User matching query does not exist.

لقد اختبرت ذلك بنفسي ؛ آمل أن يساعد!


إذا كان عنوان url الخاص بك هو شيء مثل domain/search/?q=haha ، عندئذٍ يمكنك استخدام request.GET.get('q', '') .

q هي المعلمة التي تريدها ، و '' هي القيمة الافتراضية إذا لم يتم العثور على q .

إذا كنت تقوم بدلاً من ذلك بتكوين URLconf الخاص بك URLconf ، يتم تمرير URLconf الخاصة بك من URLconf (أو وسيطات مسماة).

مثل:

(r'^user/(?P<username>\w{0,50})/$', views.profile_page,),

ثم في views.py لديك

def profile_page(request, username):
    # Rest of the method

في الحالات التي يكون فيها كائن request لديك فقط ، يمكنك استخدام request.parser_context['kwargs']['your_param']


لتوضيح تفسير camflan ، دعنا نفترض أن لديك

  • the rule url(regex=r'^user/(?P<username>\w{1,50})/$', view='views.profile_page')
  • في الطلب الوارد لـ http://domain/user/thaiyoshi/?message=Hi

ستلتزم قاعدة المرسل URL أجزاء من مسار URL (هنا "user/thaiyoshi/" ) وتمريرها إلى وظيفة عرض جنبا إلى جنب مع كائن الطلب.

يتم تحليل سلسلة الاستعلام (هنا message=Hi ) ويتم تخزين المعلمات كـ QueryDict في request.GET . لا تتم مطابقة أو معالجة إضافية لمعلمات HTTP GET.

تستخدم وظيفة طريقة العرض هذه الأجزاء المستخرجة من مسار URL ومعلمة طلب البحث:

def profile_page(request, username=None):
    user = User.objects.get(username=username)
    message = request.GET.get('message')

كملاحظة جانبية ، ستجد طريقة الطلب (في هذه الحالة "GET" ، وبالنسبة للنماذج المقدمة عادة "POST" ) في request.method . في بعض الحالات ، من المفيد التحقق من مطابقتها لما تتوقعه.

تحديث: عند تحديد ما إذا كنت ستستخدم مسار URL أو معلمات طلب البحث لتمرير المعلومات ، فقد يساعد ما يلي:

  • استخدام مسار عنوان URL للتعرف على الموارد بشكل فريد ، على سبيل المثال /blog/post/15/ (not /blog/posts/?id=15 )
  • استخدام معلمات الاستعلام لتغيير طريقة عرض الموارد ، على سبيل المثال /blog/post/15/?show_comments=1 أو /blog/posts/2008/?sort_by=date&direction=desc
  • لجعل عناوين URL سهلة الاستخدام ، تجنب استخدام أرقام المعرفات واستخدامها على سبيل المثال التواريخ والفئات و / أو الرقائق: /blog/post/2008/09/30/django-urls/

هذا ليس بالضبط ما طلبته ، ولكن هذا المقتطف مفيد لإدارة query_strings في templates .


def some_view(request, *args, **kwargs):
    if kwargs.get('q', None):
        # Do something here ..






rest