我知道'?'字符在Django的URL中是不建议使用的,但是我的一个要求是处理外部调用,如 "files?access_token=",我不能改变它们的语法,所以我需要处理它。
1 re_path(r'(?P<filenamename>[^/]+)(.+)access_token', views.GetFileInfo, name='get_info')
2 re_path(r'(?P<filenamename>[^/]+)(\?)access_token', views.GetFileInfo, name='get_info')
3 re_path(r'(?P<filenamename>[^/]+)(?)access_token', views.GetFileInfo, name='get_info')
4 re_path(r'(?P<filenamename>[^/]+)?access_token', views.GetFileInfo, name='get_info')
5 re_path(r'(?P<filenamename>[^/]+)\?access_token', views.GetFileInfo, name='get_info')
但上面的方法都不能解决 顶端的url可以处理其他字符,但不能处理问号。我开始考虑自己写一个中间件(从来没有做过)来改变请求的属性,或者使用像url_rewrite这样的东西,但所有这些看起来都是过度工程,像处理一个字符这样的简单任务。
这是 不 径的一部分,所以 url
path
不知道这一点。这就是 询问串 [wiki]. 储存在 request.GET
[Django-doc] 作为 QueryDict
对象[Django-doc],一个类似字典的对象。
因此,你可以将路径定义为
path('<str:magic_name>', views.GetFileInfo, name='get_info')
并在视图中用:
def GetFileInfo(request, magic_name):
access_token = request.GET.get('access_token')
# …
你也可以使用query_params来获取查询字符串,如:。
access_token = request.query_params.get('access_token')
然后,你可以根据你的需求对模型数据进行获取或过滤操作。