অনুরোধে url পরামিতি ক্যাপচার করা হচ্ছে G GET G


457

টিউটোরিয়ালে বর্ণিত হিসাবে আমি বর্তমানে একটি url- এ পরামিতিগুলি ক্যাপচার করতে নিয়মিত অভিব্যক্তি সংজ্ঞায়িত করছি। অংশ হিসাবে আমি কীভাবে url থেকে প্যারামিটারগুলি অ্যাক্সেস করব HttpRequest? আমার HttpRequest.GETবর্তমানে একটি খালি QueryDictবস্তু ফেরত দেয় ।

আমি লাইব্রেরি ছাড়া এটি কীভাবে করব তা শিখতে চাই যাতে জাজানো আরও ভাল করে জানতে পারি।

উত্তর:


659

যখন ইউআরএলটি এমন হয়:,domain/search/?q=haha তখন আপনি ব্যবহার করতে পারেন request.GET.get('q', '')

qআপনি যে প্যারামিটারটি চান তা ''হ'ল এবং যদি qএটি না পাওয়া যায় তবে এটি ডিফল্ট মান ।

তবে, আপনি যদি পরিবর্তে কেবল নিজেরটি কনফিগার করে থাকেন তবে আপনারURLconf থেকে ক্যাপচারগুলি regexআর্গুমেন্ট (বা নামযুক্ত আর্গুমেন্ট) হিসাবে ফাংশনে পৌঁছে দেওয়া হবে।

যেমন:

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

তারপরে views.pyতোমার কাছে থাকবে

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

10
'? পরম =' একমাত্র উপায় জ্যাঙ্গো প্যারামিটারগুলি স্বীকৃতি দেয়? HTTP.GET- এর সাথে ইউআরএলকনফ ব্যবহার করার কোনও উপায় আছে কি? আমি / পরম / 2 করতে চাই।
sutee

3
আপনার URLconf এবং regex ক্যাপচার সম্পর্কিত আমার প্রতিক্রিয়া দ্বিতীয় অংশ পরীক্ষা করুন।
ক্যামফ্লান

2
সমস্যা নেই. অনুরোধটি ব্যবহার করুন। আপনি জিইটি ব্যবহার করে কোনও ফর্ম জমা দিলে অনুরোধটি ব্যবহার করুন you আপনি যদি পোষ্ট ব্যবহার করে কোনও ফর্ম জমা দেন তবে আপনি যদি ইউআরএলগুলিকে পরিবর্তনশীল বিভাগগুলি কনফিগার করতে চান তবে এটি URLconf / দেখার আর্গুমেন্ট view
ক্যামফ্লান

10
শ্রেণিভিত্তিক দৃষ্টিভঙ্গি সম্পর্কে কী?
ব্যবহারকারী

8
self.kwargs['parameter']
শ্রেণিভিত্তিক

335

ক্যামফ্লানের ব্যাখ্যা স্পষ্ট করতে, ধরুন আপনার কাছে রয়েছে

  • নিয়ম url(regex=r'^user/(?P<username>\w{1,50})/$', view='views.profile_page')
  • জন্য আগত অনুরোধ http://domain/user/thaiyoshi/?message=Hi

ইউআরএল প্রেরণের নিয়মটি ইউআরএল পাথের কিছু অংশ (এখানে "user/thaiyoshi/") ধরবে এবং অনুরোধের অবজেক্টের সাথে প্রদর্শন ফাংশনে এগুলি দেবে।

ক্যোরিয় স্ট্রিং (এখানে message=Hi) পার্স করা হয়েছে এবং প্যারামিটারগুলি QueryDictইন হিসাবে সংরক্ষণ করা হয় request.GET। এইচটিটিপি জিইটি প্যারামিটারগুলির সাথে আর কোনও মিল বা প্রক্রিয়াকরণ করা হয় না।

এই ভিউ ফাংশনটি ইউআরএল পাথ এবং একটি ক্যোয়ারী প্যারামিটার থেকে আহৃত উভয় অংশ ব্যবহার করবে:

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

পার্শ্ব নোট হিসাবে, আপনি অনুরোধের পদ্ধতিটি (এই ক্ষেত্রে "GET"এবং সাধারণত জমা দেওয়া ফর্মগুলির জন্য "POST") খুঁজে পাবেন request.method। কিছু ক্ষেত্রে এটি আপনার প্রত্যাশার সাথে মেলে কিনা তা পরীক্ষা করা দরকারী useful

আপডেট: তথ্য পাস করার জন্য ইউআরএল পথ বা ক্যোয়ারীর প্যারামিটারগুলি ব্যবহার করবেন কিনা তা সিদ্ধান্ত নেওয়ার সময়, নিম্নলিখিতগুলি সহায়তা করতে পারে:

  • সম্পদগুলি অনন্যরূপে চিহ্নিত করার জন্য ইউআরএল পথটি ব্যবহার করুন, যেমন /blog/post/15/(নয় /blog/posts/?id=15)
  • সংস্থানটি প্রদর্শিত হওয়ার পরিবর্তনের জন্য ক্যোয়ারী প্যারামিটার ব্যবহার করুন, যেমন /blog/post/15/?show_comments=1বা/blog/posts/2008/?sort_by=date&direction=desc
  • মানব বান্ধব ইউআরএল তৈরি করতে, আইডি নম্বর ব্যবহার করা এবং উদাহরণস্বরূপ তারিখ, বিভাগ এবং / অথবা স্লাগগুলি ব্যবহার করা এড়ানো: /blog/post/2008/09/30/django-urls/

17
এটি একটি সত্যই লিখিত উত্তর। এটি নিশ্চিতভাবে আমাকে জাঙ্গোকে আরও ভালভাবে বুঝতে সহায়তা করেছে।
চিহ্নিত করুন

2
নাম উল্লেখ না করে আমরা কীভাবে সমস্ত প্যারামিটারের মান পেতে পারি
সংখ্যাটি

@ নিউমারাহ রিকোয়েস্ট.জিইটি একটি পাইথন অভিধান dictionary আপনি যেমন অনুরোধের মাধ্যমে পুনরাবৃত্তি করতে পারেন G GET.items ()।
আকাইহোলা

নিখুঁত উত্তর.
জে গীথ

1
আপডেটে লেখা অভ্যাসগুলি অনুসরণ করা কেন এটি পছন্দ? (জিইটি
প্যারাম

55

জিইটি ব্যবহার করা হচ্ছে

request.GET["id"]

পোস্ট ব্যবহার করা হচ্ছে

request.POST["id"]

27
এটি বিদ্যমান কীগুলির জন্য কাজ করার সময়, ক্যামফ্লান এবং আকাইহোলার উত্তরগুলি অনুপস্থিত কীগুলির KeyErrorক্ষেত্রে ব্যতিক্রম এড়াতে .get () ব্যবহার করেছে । একই কাজ করা বুদ্ধিমানের কাজ হবে (যেমন request.POST.get('id', ''))।
19:30 এ 1915



20

আমি এখানে নিজের কিছু বিকল্প যুক্ত করতে চাই। কেউ url.py এ যেমন পথ নির্ধারণ করবেন তা ভাববেন

domain/search/?q=CA

যাতে আমরা জিজ্ঞাসা প্রার্থনা করতে পারে।

আসল বিষয়টি হ'ল urls.py এ এমন রুট সেট করা প্রয়োজন হয় না। আপনাকে যা সেট করতে হবে তা হ'ল ইউআরএল.পি.

urlpatterns = [
    path('domain/search/', views.CityListView.as_view()),
]

এবং আপনি ইনপুট HTTP: // servername: পোর্ট / ডোমেইন / অনুসন্ধান / কুই = সিএ । প্রশ্নের অংশ '? Q = CA' হ্যাশ টেবিলটিতে স্বয়ংক্রিয়ভাবে সংরক্ষণ করা হবে যা আপনি উল্লেখ করতে পারেন

request.GET.get('q', None).

এখানে একটি উদাহরণ (view.py)

class CityListView(generics.ListAPIView):
    serializer_class = CityNameSerializer

    def get_queryset(self):
        if self.request.method == 'GET':
            queryset = City.objects.all()
            state_name = self.request.GET.get('q', None)
            if state_name is not None:
                queryset = queryset.filter(state__name=state_name)
            return queryset

এছাড়াও, আপনি যখন url এ ক্যোয়ারী স্ট্রিং লিখবেন

http://servername:port/domain/search/?q=CA

উদাহরণস্বরূপ কোয়েরিতে স্ট্রিং মোড়বেন না

http://servername:port/domain/search/?q="CA"

হাই এরিক! আমি জাজানোতে নতুন am আপনি কি "ক্যোরিসেট = ক্যুরিসেট.ফিল্টার (state__name = state_name)" এ আরও আলোকপাত করতে পারেন। State__name এ ডাবল আন্ডারস্কোরটি কী বোঝায়?
সাববু

1
এখানে "রাষ্ট্র" একটি সারণী এবং এই সারণিতে "নাম" ফাইল করা আছে। জাজানো ফিল্টারে, state__name "রাজ্য" সারণীতে "নাম" ক্ষেত্রের মান উল্লেখ করবে।
এরিক অ্যান্ড্রুজ

এটি অন্যের তুলনায় কাজ করেছিল।
সিবিশ

17

আমি একটি টিপ শেয়ার করতে চাই যা আপনাকে কিছুটা সময় সাশ্রয় করতে পারে।
আপনি যদি নিজের urls.pyফাইলে এরকম কিছু ব্যবহার করার পরিকল্পনা করেন :

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

মূলত যার অর্থ www.example.com/<username>। , আপনার URL এন্ট্রি শেষে রাখুন কারণ অন্যথায়, এটি URL টি এন্ট্রি যে নীচে অনুসরণ সঙ্গে কারণ দ্বন্দ্ব প্রবণ ভুলবেন না, অর্থাত অ্যাক্সেস তাদের মধ্যে একজন হবে আপনি সুন্দর ত্রুটি করা উচিত: User matching query does not exist.

আমি এটা নিজেকে ভুগেছেন; আশা করি এটা সাহায্য করবে!


2
এছাড়াও, এই ক্ষেত্রে আপনি যাচাই করতে পারেন যে ব্যবহারকারীর নামগুলি অন্য ইউআরএল এনট্রিগুলির সাথে সংঘর্ষে না।
ডাঃকোলিএন

13

আপনার ইউআরএলটি দেখতে দেখতে দুটি সাধারণ উপায় রয়েছে:

https://domain/method/?a=x&b=y

v1 এ:

নির্দিষ্ট কী বাধ্যতামূলক হলে আপনি ব্যবহার করতে পারেন:

key_a = request.GET['a']

এটি aকী উপস্থিত থাকলে একটি মান এবং যদি না থাকে তবে একটি ব্যতিক্রম ফিরিয়ে দেয় ।

v2:

যদি আপনার কীগুলি alচ্ছিক হয়:

request.GET.get('a')

আপনি চেষ্টা করতে পারেন যে কোনও যুক্তি ছাড়াই এটি ক্রাশ হবে না। সুতরাং আপনি এটি দিয়ে মোড়ানো এবং উদাহরণে try: except:ফিরে আসতে পারেন HttpResponseBadRequest()। বিশেষ ব্যতিক্রম হ্যান্ডলিং ব্যবহার না করেই আপনার কোডটি কম জটিল করার সহজ উপায়।


আমি কীভাবে টেমপ্লেট থেকে ক্যোয়ারী পরম সনাক্ত করতে পারি?
আকিন হাওয়ান


4

এই প্রশ্নগুলি বর্তমানে দুটি উপায়ে সম্পন্ন হয়েছে। আপনি যদি ক্যোয়ারী প্যারামিটারগুলি (জিইটি) অ্যাক্সেস করতে চান তবে আপনি নীচের প্রশ্নগুলি করতে পারেন:

http://myserver:port/resource/?status=1
request.query_params.get('status', None) => 1

আপনি যদি পোষ্ট দ্বারা পাস করা প্যারামিটারগুলি অ্যাক্সেস করতে চান তবে আপনাকে এইভাবে অ্যাক্সেস করতে হবে:

request.data.get('role', None)

'Get ()' দিয়ে অভিধানটি (ক্যোরিডিক্ট) অ্যাক্সেস করে আপনি একটি ডিফল্ট মান সেট করতে পারেন। উপরের ক্ষেত্রে, যদি 'স্থিতি' বা 'ভূমিকা' অবহিত না হয় তবে মানগুলি কোনও হয় না।


0

এটি অন্য বিকল্প সমাধান যা প্রয়োগ করা যেতে পারে:

ইউআরএল কনফিগারেশনে। :

urlpatterns = [path('runreport/<str:queryparams>', views.get)]

মতামত:

list2 = queryparams.split("&")
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.