2017-07-10 2 views
-1

クライアントのURL変更をブロックするためにアドバイスを受けたいと思います。 たとえば、私のウェブサイトにクライアントがあり、ログ処理後に自分のページにリダイレクトします。Djangoのウェブサイト:URLアドレスを変更不可にする

彼のホームページURLは、Compagny1に対応するidのようなhttp://localhost:8000/Compagny/id/のようになります。彼はCompagny2のホームページにリダイレクトされますhttp://localhost:8000/Compagny/2/、私はこの可能性を望んでいない:

例えば

:私のクライアントが書き込むとhttp://localhost:8000/Compagny/1/1では、URLバーに、最初COMPAGNY ですが。

私の質問は:

私は不変のURLアドレスを設定するためにいくつかのルール、関数、または何か他のものを実装するにはどうすればよいですか?クライアントはURLを変更できず、別のクライアントを参照するホームページを参照できませんでしたか?

はありがとう

EDIT:これは私のホームページビューが

です:

@login_required 
def HomePage_Compagny(request, id) : 

    compagny = get_object_or_404(Compagny, pk=id) 
    intervention = CompagnyIntervention.objects.filter(Compagny__id=id).all() 
    pointsajoutes = CompagnyAjout.objects.filter(Compagny__id=id).all() 

    coefficient = CoefficientIntervention.objects.last() 

    if request.method == 'POST': 

     form_ajout = ContratAjoutFormulaire(request.POST or None) 

     if form_ajout.is_valid() : 

      #Several processes 

      return HttpResponseRedirect('http://mywebsite/'+id) 

    else: 
     form_ajout = ContratAjoutFormulaire() 


    context = { 
     ... 
    } 

    return render(request, 'CompagnyHomePage.html', context) 

この部分のための私のURLは次のとおりです。あなたが書いたあなたのviews.pyファイルでurl(r'^Compagny/(?P<id>\d+)/$', views.Homepage_Compagny, name="Homepage"),

+0

だけurls.py 'URL(r'mywebsite/CSAの$」、ビュー)に直接名前を定義します' –

+0

@AvinashRajしかし、私が直接URL名を定義すると、' url(r'mywebsite/csa $ '、view) '、' url(r'mywebsite/aboproject $'、sameview) '..クライアントはURLを変更することができますもう一度別のホームページにアクセスできますか? – Andro

+0

待ちますか?クライアントがコードを変更できるかどうか –

答えて

1

ユーザーがブラウザにURLを入力できないようにすることはできません。代わりに、ビュー内のアクセスを制限し、ユーザーがその会社にアクセスすることを許可されていない場合は404を返します。例えば

CompagnyUserへの外部キーを持っている、そしてあなたが行うことができれば:

@login_required 
def HomePage_Compagny(request, id) : 

    compagny = get_object_or_404(Compagny, pk=id, user=request.user) 
    ... 
+0

オクラホマので、私は新しいモデル'ユーザーを実装する必要がを持っている必要があります'とユーザーとCompagnyの間の関係を右に作る?すでに場合 – Andro

+0

いいえ、 'User'は[Djangoのユーザモデルやカスタム・ユーザー・モデル](https://docs.djangoproject.com/en/1.11/topics/auth/customizing/#referencing-the-user-model)であります定義されたもの。 – Alasdair

+0

私はDjango Adminで 'User management'を使用したので、' User model'を作成しなければなりません。 – Andro

1

ページの機能にはuser=request.userを指定する必要があります。この場合、複数のメソッドを適用して特定のサイトのユーザーをブロックできます。

  1. ビューではif user.is_authenticated():メソッドを使用してください。
  2. ユーザーはあなたがメインページに彼をリダイレクトすることができ、URLを訪問した場合、現在のユーザーがサイト

を見ることが許可されている場合

  • テンプレートにチェックをユーザーにグループを与え、特定のページへのアクセスを拒否404を表示するか、彼にこのサイトのアクセス権がないことを伝えてください。あなたのようなエラーメッセージを表示することができ、テンプレート、例えば

    :あなたは「所有」のユーザーを定義し、「pageowner」属性を定義する必要がありますviews.py機能に

    {% if request.user == pageowner %} 
    the site code 
    
    {%else%} 
    
    <h1>This is not your Site. Please Go back</h1> 
    {%endif%} 
    

    かそのページを少なくとも作成しました。

    +0

    私はあなたの答えを読んだが、私はあなたのコメントに少し問題がある。私は各Compagnyに従ってデータを変更する汎用テンプレートを持っています。 {%からrequest.user場合==のCSA%} ''しかし、HTMLは、あなたがいないすべてのので、ユーザ名をハードコーディングすることになっていない、同じ時間でコースの – Andro

    +0

    を 'aboproject'に同じ汎用テンプレートが表示されません。だから私は、例えば持っていますユーザーは「csa」と呼ばれていますか?あなたがする必要があるのは、views.py関数の中に定義を書くことです。 'pageowner = compagny.created_by'とCOMPAGNYモデルでは、「CREATED_BY」属性(あなたがとにかくその常に興味深いので、ページを作成した人知っていることが必要です) – hansTheFranz

    関連する問題