Django:如何解码 url 以获得变量值?
Django: How to decode the url to get the variable value?
我正在尝试做 django api。
这是urls.py
中的代码
url(r'^edit/(?P<name>[\w-]+)/$', UpdateView.as_view(), name="update")
views.py
class UpdateView(RetrieveUpdateView):
queryset = Book.objects.all()
serializer_class = BookUpdateSerializer
lookup_field = "name"
name
变量可能包含“|”符号。
当我在浏览器中打开 URL 127.0.0.1:8000/api/edit/ABCD|1234
时,其中 ABCD|1234
是变量 name
,url 会自动对其进行编码,并且它变成 127.0.0.1:8000/api/edit/ABCD%7C1234
。
在我的数据库中找不到这个名字。
我如何对其进行解码并从我的数据库中检索数据?
Django 将为您解码 url。当您访问 self.kwargs['name']
时,它将是 'ABCD|1234'
,而不是 'ABCD%7C1234'
。
但是,您有一个单独的问题。您当前的正则表达式组 [\w-]+
将仅匹配大写字母 A-Z、小写字母 a-z、数字 0-9、下划线 _
和连字符 -
。如果你想匹配像 |
这样的字符,你必须改变它。
您只需将 |
添加到群组即可:
# put | before - otherwise you have to escape hypen with \-
url(r'^edit/(?P<name>[\w|-]+)/$', UpdateView.as_view(), name="update")
或者,如果有很多其他字符要添加到组中,您可以匹配除正斜杠之外的任何字符:
url(r'^edit/(?P<name>[^/]+)/$', UpdateView.as_view(), name="update")
我正在尝试做 django api。
这是urls.py
中的代码url(r'^edit/(?P<name>[\w-]+)/$', UpdateView.as_view(), name="update")
views.py
class UpdateView(RetrieveUpdateView):
queryset = Book.objects.all()
serializer_class = BookUpdateSerializer
lookup_field = "name"
name
变量可能包含“|”符号。
当我在浏览器中打开 URL 127.0.0.1:8000/api/edit/ABCD|1234
时,其中 ABCD|1234
是变量 name
,url 会自动对其进行编码,并且它变成 127.0.0.1:8000/api/edit/ABCD%7C1234
。
在我的数据库中找不到这个名字。 我如何对其进行解码并从我的数据库中检索数据?
Django 将为您解码 url。当您访问 self.kwargs['name']
时,它将是 'ABCD|1234'
,而不是 'ABCD%7C1234'
。
但是,您有一个单独的问题。您当前的正则表达式组 [\w-]+
将仅匹配大写字母 A-Z、小写字母 a-z、数字 0-9、下划线 _
和连字符 -
。如果你想匹配像 |
这样的字符,你必须改变它。
您只需将 |
添加到群组即可:
# put | before - otherwise you have to escape hypen with \-
url(r'^edit/(?P<name>[\w|-]+)/$', UpdateView.as_view(), name="update")
或者,如果有很多其他字符要添加到组中,您可以匹配除正斜杠之外的任何字符:
url(r'^edit/(?P<name>[^/]+)/$', UpdateView.as_view(), name="update")