Django url 不是找不到一些 UTF-8 用户名

Django url not cannot find some UTF-8 usernames

我正在为 Django 应用程序中的用户名试验 UTF-8。

Django 是版本 3.2.11

Python使用的是3.9.4

一些用户可能有其他人可见的个人资料和 url 中的用户名:

re_path("^u/(?P<username>\w+)/$", views.author_profile_view, name="author_profile_view"),

正常示例工作正常:

UTF-8 示例 1 也可以正常工作:

但是这个 UTF-8 不起作用:

浏览器确实显示它很奇怪,因为他没有将 %7C“翻译”成 |,但这应该只是光学的?

显示的错误只是

Page not found (404)
Request Method: GET
Request URL:    http://127.0.0.1:8000/u/%C9%82%C3%A1%E2%B1%B31%E2%81%844%7C%C4%AD%C4%9F%C4%99
The current path, u/ɂáⱳ1⁄4|ĭğę, didn’t match any of these.

在 Django 中 shell 我可以查询这个用户:

>>> User.objects.get(username='ɂáⱳ1⁄4|ĭğę')
<User: ɂáⱳ1⁄4|ĭğę>

我觉得 URI 解码没问题。

我希望有人能解释为什么一个 UTF-8 字符串会发生这种情况,而另一个不会。或者甚至可能知道如何修复它? :-D

我知道允许所有 UTF-8 用于用户名可能不是明智之举,但这对我来说更像是一个实验。

谢谢

发生这种情况的原因与UTF-8无关,而是用户名包含非单词字符(\w不匹配的字符):不允许使用的字符对于 <str:…> 路径转换器。您可以使用 <path:…>:

path('u/<strong><path:</strong>username<strong>></strong>/', some_view, name='some_name')