什么是 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 等,那么你可以编写自己的验证器。
假设我的站点的域是 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 等,那么你可以编写自己的验证器。