我正在尝试做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
。
它无法从我的数据库中找到此名称。 如何解码并从数据库中检索数据?
答案 0 :(得分:3)
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")