Django:如何在Django URL中读取问号(?)

4

我正在开发一个Django应用程序,将用户输入存储在数据库中。现在的问题是,当用户在输入字段中写入 ? 字符时,Django将其视为查询字符串的一部分,因此不会保存它。

我正在使用以下JavaScript代码:

$("#submit").on("click",function(){
    text = $("#input").val();
    $.get('/add/'+text);
}

这是我的urls.py文件:

urlpatterns = [
     path('add/<str:text>',views.add, name='add'),
     ..............
]

views.py文件中,我有:

def add(request,text):
    field = Text(text=text)
    field.save()
    return HttpResponse('')

2个回答

2
这是因为您没有正确地进行编码。您需要使用百分号编码[维基百科]来对URL中的数据进行编码。
在JavaScript中,您可以使用encodeURIComponent函数来实现:
$("#submit").on("click",function(){
    text = $("#input").val();
    $.get('/add/'+<b>encodeURIComponent(</b>text<b>)</b>);
}

问号将被编码为%3F,因为这是映射在代码点63上的字符(或十六进制数0x3f)。
请注意,str不会匹配斜杠。因此,您可能需要使用path
urlpatterns = [
     path('add/<<b>path:</b>text>',views.add, name='add'),
     # …
]

如果您要创建、删除、更新等记录,则应使用POST、PUT、PATCH或DELETE请求,因为GET请求不应具有任何副作用。在这种情况下,最好将数据作为请求负载传递。

1
使用POST请求而不是URL。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接