假设我的网站的域名是mysite.com,现在每当有这样的请求时出现:mysite.com/ {{}}}:我想取出这个网址“https://stackoverflow.com”并将其发送给相应的观点。
我尝试过这种模式:
URL(R'^(P< preurl> HTTP [S]://(:???[A-ZA-Z] | [0-9] | [$ -_ @&安培; +] | [*(),!] |(?:%[0-9A-FA-F] [0-9A-FA-F]))+)$”,prepend_view)
正则表达式与传入的附加网址匹配,并为变量预先设置值“https://stackoverflow.com”,我在相应的视图函数中访问该值。
这适用于上面的示例但我的网址模式在某些特殊网址的情况下失败了.. 请考虑所有特殊网址,建议一个强大的网址模式,如下所示:
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的一个
我应该能够在变量preurl中获得值“ldap:// [2001:db8 :: 7] / c = GB?objectClass?one”
答案 0 :(得分:1)
您不必制作此类复杂的网址格式。首先,制作一个与所有内容匹配的网址格式。
url(r'^.*/$', views.fast_track_service, name='fast_track'),
并将其附加到url中的urlpatterns中,然后在您的视图中使用请求对象,这样您就可以使用此方法获取get请求的完整路径,
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等,那么您可以编写自己的验证器。