2017-10-29 1 views
0

私のサイトのドメインがmysite.comであるとしましょう。リクエストは次の形式で提供されます:mysite.com/ https://stackoverflow.com:このURL「https://stackoverflow.com」を取り出して、対応するビューに送信します。DjnagoのURLパターン(URLの照合と取り出し(サイトのドメインにGETリクエストとして追加される))は何でしょうか?

が、私はこのパターン試してみました:

URL(r 'を^(P <preurl> HTTP [S]://(:???[-ZA-Z] | [0-9] | [0-9a-fA-F])+)$)、prepend_view)

[$ - [email protected]

その正規表現は、追加される着信URLと一致し、対応するビュー機能でアクセスする値「https://stackoverflow.com」を変数preurlに割り当てます。

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

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

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

    mailto:[email protected] 

    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 

これは、上記の例のために正常に動作しますが、私のURLパターンは、いくつかの例外URLの場合に失敗します。.. は、次のように、すべての例外のURLあまりにも考慮して堅牢なURLパターンを提案して下さい

つまり、リクエストが次のようになった場合: mysite.com/ldap://[2001:db8::7]/c=GB?objectClass?one

私は値 "ldap: // [2001:db8 :: 7]/c = GB?objectClass?one "、変数preurl

+1

あなたの質問を読んで問題を少し効率的に説明してください。そして、質問のタイトルを編集してください。役に立つ質問をする方法を慎重にしないために、私はStackOverflowによって質問をすることができませんでした。私がしたのと同じ間違いをしないでください。 –

答えて

1

このタイプの複雑なURLパターンを作成する必要はありません。まず、すべてに一致するURLパターンを作成します。

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

とあなたのビューで、あなたのurls.pyにu​​rlpatternsで最後に追加し、使用要求オブジェクト、だから、あなたがこの方法で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 

mailtoなどの他の複雑なURLを検証したい場合は、独自のバリデーターを書くことができます。

関連する問題