什么是 Djnago 的 url 模式来匹配和取出 url(作为 GET 请求附加到站点的域)?

What would be Djnago's url pattern to match and fetch out a url (coming appended to site's domain as a GET request)?

假设我的站点的域是 mysite.com ,现在只要请求以这种形式出现:mysite.com/https://whosebug.com :I want to fetch out this url "https://whosebug.com" 并将其发送到相应的视图。

我试过这个模式:

url(r'^(?P

http[s]?://(?:[a-zA-Z]|[0-9]| [$-_@.&+]|[!*(),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+)$',prepend_view)

的正则表达式匹配传入的附加 url 并为变量 preurl 分配值“https://whosebug.com”,我在相应的视图函数中访问它。

这对上面的例子很好用,但是我的 url 模式在一些异常的 urls 的情况下失败了.. 请通过考虑所有异常 url 来建议稳健的 url 模式,如下所示:

 ftp://ftp.is.co.za/rfc/rfc1808.txt

  http://www.ietf.org/rfc/rfc2396.txt

  ldap://[2001:db8::7]/c=GB?objectClass?one

  mailto:John.Doe@example.com

  news:comp.infosystems.www.servers.unix

  tel:+1-816-555-1212

  telnet://192.0.2.16:80/

  urn:oasis:names:specification:docbook:dtd:xml:4.1.2

也就是说,如果请求是这样的: mysite.com/ldap://[2001:db8::7]/c=GB?objectClass?one

我应该能够在变量 preurl

中得到值 "ldap://[2001:db8::7]/c=GB?objectClass?one"

您不必制作这种复杂的 url 模式,首先,制作一个匹配所有内容的 URL 模式。

url(r'^.*/$', views.fast_track_service, name='fast_track'),

并将其附加到 urls.py 中 url 模式的末尾,然后在您的视图中,使用请求对象,因此您可以使用此方法获取获取请求的完整路径,

fast_track_url = request.get_full_path()[1:]

然后一旦你得到 url 尝试用 URLValidator 像这样验证它。

if not 'http://' in fast_track_url and not 'https://' in fast_track_url:
        fast_track_url = 'http://' + fast_track_url
url_validate = URLValidator()
try:
    url_validate(fast_track_url)
except:
    raise Http404

如果你想验证其他复杂的 URL 比如 mailto 等,那么你可以编写自己的验证器。