从管理面板向django中注册的用户授予访问权限

时间:2015-08-29 14:05:19

标签: python django django-forms django-admin django-views

所以,我试图允许用户在我们决定是否有资格登录后才注册 AND

基本上,我想要的流程是下一个:

  1. 用户尝试登录 - >如果他没有注册,请点击注册链接(已完成)
  2. 用户在注册表单中键入一些数据并提交(已完成)
  3. 现在,数据将出现在Django管理面板中。
  4. 我想要一种批准用户数据的方法,然后才允许他登录。

    到目前为止我的代码:

    forms.py

    class RegistrationForm(forms.Form):
    
        username = forms.RegexField(regex=r'^\w+$', widget=forms.TextInput(attrs=dict(required=True, max_length=30)), label=_("Username"), error_messages={ 'invalid': _("This value must contain only letters, numbers and underscores.") })
        email = forms.EmailField(widget=forms.TextInput(attrs=dict(required=True, max_length=30)), label=_("Email address"))
        password1 = forms.CharField(widget=forms.PasswordInput(attrs=dict(required=True, max_length=30, render_value=False)), label=_("Password"))
        password2 = forms.CharField(widget=forms.PasswordInput(attrs=dict(required=True, max_length=30, render_value=False)), label=_("Password (again)"))
    
        def clean_username(self):
            try:
                user = User.objects.get(username__iexact=self.cleaned_data['username'])
            except User.DoesNotExist:
                return self.cleaned_data['username']
            raise forms.ValidationError(_("The username already exists. Please try another one."))
    
        def clean(self):
            if 'password1' in self.cleaned_data and 'password2' in self.cleaned_data:
                if self.cleaned_data['password1'] != self.cleaned_data['password2']:
                    raise forms.ValidationError(_("The two password fields did not match."))
            return self.cleaned_data
    

    views.py

    @csrf_protect
    def register(request):
        if request.method == 'POST':
            form = RegistrationForm(request.POST)
            if form.is_valid():
                user = User.objects.create_user(
                    username=form.cleaned_data['username'],
                    password=form.cleaned_data['password1'],
                    email=form.cleaned_data['email']
                )
                return HttpResponseRedirect('/register/success/')
        else:
            form = RegistrationForm()
        variables = RequestContext(request, {
            'form': form
        })
    
        return render_to_response(
            'registration/register.html',
            variables,
        )
    
    def register_success(request):
        return render_to_response(
            'registration/success.html',
        )
    
    def logout_page(request):
        logout(request)
        return HttpResponseRedirect('/')
    
    @login_required
    def home(request):
        return render_to_response(
            'home.html', {
                'user': request.user
            }
        )
    

    urls.py

    urlpatterns = [
        url(r'^$', 'django.contrib.auth.views.login'),
        url(r'^logout/$', views.logout_page),
        url(r'^accounts/login/$', 'django.contrib.auth.views.login'),
        url(r'^register/$', views.register),
        url(r'^register/success/$', views.register_success),
        url(r'^home/$', views.home),
    
        url(r'^admin/', include(admin.site.urls)),
    ]
    

    的login.html

    <form method="post" action=".">
                {% if form.errors %}
                    <p>Your username and password didn't match. Please try again.</p>
                {% endif %}
                {% csrf_token %}
                <table border="0">
                    <tr><th><label for="id_username">Name:</label></th><td>{{ form.username }}</td></tr>
                    <tr><th><label for="id_password">Password:</label></th><td>{{ form.password }}</td></tr>
                </table>
                <div class="send">
                    <div class="now" style="text-align: center">
                        <input type="submit" value="Login" />
                        <input type="hidden" name="next" value="/home" />
                    </div>
                </div>
            </form>
    

    register.html

    <form method="post" action=".">{% csrf_token %}
        <table border="0">
            {{ form.as_table }}
        </table>
        <input type="submit" value="Register" />
    </form>
    

    请问任何想法?

1 个答案:

答案 0 :(得分:1)

您可以将is_active标记为false的用户保存,然后在您决定激活该用户(is_active为True时)。 is_active=False的用户无法登录,但在管理面板中显示为您。

user = User.objects.create_user(
            username=form.cleaned_data['username'],
            password=form.cleaned_data['password1'],
            email=form.cleaned_data['email'],
        )
user.is_active = False
user.save()
相关问题