2016-09-02 2 views
0

私はログインするユーザーを必要とせずにDjangoの登録ページをパスワードで保護しようとしていますが、私はそれを把握していないようです。私の流れは次のようになります。Djangoでログインしなくてもビューを保護できますか?

  1. ユーザーが成功すると、ユーザーはUserCreationFormで提示されている場合は失敗し、ユーザーはパスワード
  2. を再入力する場合mydomain.com/register/
  3. ユーザーがregistration_accessフォーム
  4. にパスワードを入力しアクセスします
  5. UserCreationFormが正しく記入されていない場合UserCreationFormが満たされている場合は、ユーザーが再びUserCreationForm +エラー
  6. が提示されユーザーがプロファイルページにリダイレクトされました

私が今直面している問題は、ユーザーがURLなしのビュー(UserCreationFormを含むビュー)にリダイレクトできないことです。

views.py

def register(request): 
    if request.method == 'POST': 
    # Gather information from all forms submitted 
     user_custom_info = user_information(request.POST) 
     user_info = UserCreationForm(request.POST) 
     profile_info = deejay_form(request.POST) 

     # Check to make sure they entered data into each of the forms 
     info_validated = user_info.is_valid() and user_custom_info.is_valid() and profile_info.is_valid() 

     # If they did... 
     if info_validated: 

      # Clean the data... 
      user_custom_info = user_custom_info.cleaned_data 
      user_info = user_info.cleaned_data 
      profile_info = profile_info.cleaned_data 

      # Create a new user with those traits 
      new_user = User.objects.create_user(user_info['username'], user_custom_info['email'], user_info['password1']) 
      new_user.first_name = user_custom_info['first_name'] 
      new_user.last_name = user_custom_info['last_name'] 
      new_user.save() 

      # Create a new deejay with those traits.. 
      new_deejay = Deejay(user=new_user, dj=profile_info['dj'], role=profile_info['role'], bio=profile_info['bio'], phone=profile_info['phone']) 
      new_deejay.save() 

      # Log in the user.. 
      if not request.user.is_authenticated(): 
       this_user = authenticate(username=user_info['username'], password=user_info['password1']) 
       login(request, this_user) 

      # Need to add to group - http://stackoverflow.com/questions/6288661/adding-a-user-to-a-group-in-django 

      # Redirect to dj page 
      return redirect('dj_detail', dj_name=Deejay.objects.get(user=request.user).dj) 
     else: 
      return render(request, 'pages/backend/register.html', {'forms':[user_custom_info, user_info, profile_info]}) 

    return render(request, 'pages/backend/register.html', {'forms':[user_information, UserCreationForm, deejay_form]}) 

# View for a password protected registration form 
def register_protect(request): 
    if request.method == 'POST': 
     pw_info = registration_access(request.POST) 
     if pw_info.is_valid(): 
      return redirect(register) 
     else: 
      return render(request, 'pages/backend/register.html', {'forms':[pw_info]}) 
    return render(request, 'pages/backend/register.html', {'forms':[registration_access]}) 

forms.py

class user_information(forms.ModelForm): 
    first_name = forms.CharField(label='First Name', required=True) 
    last_name = forms.CharField(label='Last Name', required=True) 
    email = forms.EmailField(label='Email', required=True) 
    class Meta: 
     model = User 
     fields = ('first_name', 'last_name', 'email') 

class deejay_form(forms.ModelForm): 
    class Meta: 
     model = Deejay 
     fields = ('dj', 'role', 'bio', 'phone') 

class registration_access(forms.Form): 
    secret_password = forms.CharField(label="Secret Password", widget=forms.PasswordInput()) 

    def clean(self): 
     access_password = "mypassword" 
     given_password = self.cleaned_data.get('secret_password') 
     if given_password != access_password: 
      raise forms.ValidationError("Did you forget your training?") 
     return self.cleaned_data 
+1

「URLなしでユーザーをビューにリダイレクトできない」とはどういう意味ですか、それは明白ではありませんか? –

答えて

0

手段は、定義により、バックサーバにリダイレクトする "リダイレクト":

は、ここに私のコードです。したがって、URLにリダイレクトする必要があります。同じURLにリダイレクトすることもできますが、実行したいさまざまなことを処理できるようにビューを作成する必要があります。

私には、Javascriptを使用してよりうまく機能し、1ページのアプリケーションとして処理できるように思えます。

関連する問題