簡體   English   中英

從管理面板向在django中注冊的用戶授予訪問權限

[英]Give access from admin panel to users that registered in django

所以,我想允許用戶登錄他們登記只有后,我決定他們是否有資格登錄或不是之后。

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

  1. 用戶嘗試登錄->如果尚未注冊,請單擊注冊鏈接(完成)
  2. 用戶在注冊表格中輸入一些數據並提交(完成)
  3. 現在,數據將顯示在Django管理面板中。

我想要一種批准用戶數據的方法,只有在此之后,才允許他登錄。

到目前為止,我的代碼:

表格

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>

有什么想法嗎?

您可以使用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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM