Saat ini saya mendefinisikan ekspresi reguler untuk menangkap parameter dalam url, seperti yang dijelaskan dalam tutorial. Bagaimana cara mengakses parameter dari url sebagai bagianHttpRequest
objek? HttpRequest.GET
Saat ini saya mengembalikan QueryDict
objek kosong .
Saya ingin belajar bagaimana melakukan ini tanpa perpustakaan sehingga saya bisa mengenal Django lebih baik.
self.kwargs['parameter']
Untuk memperjelas penjelasan camflan, anggaplah Anda memilikinya
url(regex=r'^user/(?P<username>\w{1,50})/$', view='views.profile_page')
http://domain/user/thaiyoshi/?message=Hi
Aturan operator URL akan menangkap bagian dari jalur URL (di sini
"user/thaiyoshi/"
) dan meneruskannya ke fungsi tampilan bersama dengan objek permintaan.String kueri (di sini
message=Hi
) diuraikan dan parameter disimpan sebagaiQueryDict
dalamrequest.GET
. Tidak ada pencocokan atau pemrosesan lebih lanjut untuk parameter HTTP GET yang dilakukan.Fungsi tampilan ini akan menggunakan kedua bagian yang diekstrak dari jalur URL dan parameter kueri:
Sebagai catatan tambahan, Anda akan menemukan metode permintaan (dalam hal ini
"GET"
, dan untuk formulir yang dikirimkan biasanya"POST"
) direquest.method
. Dalam beberapa kasus, penting untuk memeriksa apakah cocok dengan yang Anda harapkan.Pembaruan: Saat memutuskan apakah akan menggunakan jalur URL atau parameter kueri untuk meneruskan informasi, hal berikut dapat membantu:
/blog/post/15/
(tidak/blog/posts/?id=15
)/blog/post/15/?show_comments=1
atau/blog/posts/2008/?sort_by=date&direction=desc
/blog/post/2008/09/30/django-urls/
sumber
Menggunakan GET
Menggunakan POST
sumber
KeyError
pengecualian dalam kasus kunci yang hilang. Akan bijaksana untuk melakukan hal yang sama (misalnyarequest.POST.get('id', '')
).sumber
Untuk situasi di mana Anda hanya memiliki
request
objek yang dapat Anda gunakanrequest.parser_context['kwargs']['your_param']
sumber
Saya ingin menambahkan beberapa opsi sendiri, di sini. Seseorang akan bertanya-tanya bagaimana cara mengatur jalur di urls.py, seperti
sehingga kami dapat meminta kueri.
Faktanya adalah bahwa TIDAK perlu mengatur rute seperti itu di urls.py. Yang perlu Anda atur hanyalah rute di urls.py
dan ketika Anda masukan http: // servername:? pelabuhan / domain / search / q = CA . Bagian permintaan '? Q = CA' akan secara otomatis dicadangkan di tabel hash yang dapat Anda rujuk
Berikut ini sebuah contoh (views.py)
Selain itu, saat Anda menulis string kueri di Url
Jangan bungkus string kueri dalam tanda kutip, mis
sumber
Saya ingin berbagi tip yang dapat menghemat waktu Anda.
Jika Anda berencana menggunakan sesuatu seperti ini di
urls.py
file Anda :Yang pada dasarnya berarti
www.example.com/<username>
. Pastikan untuk meletakkannya di akhir entri URL Anda, karena jika tidak, cenderung menyebabkan konflik dengan entri URL yang mengikuti di bawah ini, yaitu mengakses salah satu dari mereka akan memberi Anda kesalahan yang bagus:User matching query does not exist.
Saya baru saja mengalaminya sendiri; semoga membantu!
sumber
Anda memiliki dua cara umum untuk melakukan itu jika url Anda terlihat seperti itu:
v1:
Jika kunci spesifik wajib Anda dapat menggunakan:
Ini akan mengembalikan nilai
a
jika ada kunci dan Pengecualian jika tidak.v2:
Jika kunci Anda opsional:
Anda dapat mencobanya tanpa argumen apa pun ini tidak akan macet. Jadi Anda dapat membungkusnya dengan
try: except:
dan kembaliHttpResponseBadRequest()
dalam contoh. Ini adalah cara sederhana untuk membuat kode Anda lebih kompleks, tanpa menggunakan penanganan Pengecualian khusus.sumber
Ini bukan apa yang Anda minta, tapi potongan ini sangat membantu untuk mengelola
query_strings
ditemplates
.sumber
Pertanyaan ini saat ini dilakukan dengan dua cara. Jika Anda ingin mengakses parameter kueri (GET) Anda dapat menanyakan hal-hal berikut:
Jika Anda ingin mengakses parameter yang dikirimkan oleh POST, Anda perlu mengakses cara ini:
Mengakses kamus (QueryDict) dengan 'get ()', Anda dapat menetapkan nilai default. Dalam kasus di atas, jika 'status' atau 'peran' tidak diinformasikan, nilainya adalah Tidak ada.
sumber
Ini adalah solusi alternatif lain yang dapat diterapkan:
dalam konfigurasi url. :
dalam pandangan:
sumber