django 实现登录登出的功能

django登录

django是一个python下的大型框架,之所以大,是因为很多东西都可以沿用。试了一下继承django自带的user类实现登录。
直接展现views.py

@sensitive_post_parameters()
@csrf_protect
@never_cache
def login(request, template_name='accounts/login.html',
          redirect_field_name=REDIRECT_FIELD_NAME,
          authentication_form=LoginForm,
          current_app=None, extra_context=None):
    """
    Displays the login form and handles the login action.
    """
    redirect_to = request.POST.get(redirect_field_name,
                                   request.GET.get(redirect_field_name, ''))

    if request.method == "POST":
        form = authentication_form(request, data=request.POST)
        if form.is_valid():

            # Ensure the user-originating redirection url is safe.
            if not is_safe_url(url=redirect_to, host=request.get_host()):
                redirect_to = resolve_url(settings.LOGIN_REDIRECT_URL)

            # Okay, security check complete. Log the user in.
            auth_login(request, form.get_user())

            return HttpResponseRedirect(redirect_to)
    else:
        form = authentication_form(request)

    current_site = get_current_site(request)

    context = {
        'form': form,
        redirect_field_name: redirect_to,
        'site': current_site,
        'site_name': current_site.name,
    }
    if extra_context is not None:
        context.update(extra_context)

    if current_app is not None:
        request.current_app = current_app

    return TemplateResponse(request, template_name, context)

其中form.py中的LoginForm如下:

class LoginForm(AuthenticationForm):
    def __init__(self, *args, **kwargs):
        self.user_cache = None
        super(LoginForm, self).__init__(*args, **kwargs)

    username = forms.CharField(label=_('用户名'), widget=forms.TextInput(attrs={'class': 'from-control',
                                                                          'placeholder': '用户名'

                                                                          }), error_messages={'required': u'该项必须填写'},
                               required=True)

    password = forms.CharField(label=_('密码'), widget=forms.PasswordInput(attrs={
        'class': 'form-control',
        'placeholder': '密码',
    }, render_value=True), error_messages={'required': u'该项必须填写'}, required=True)

    error_messages = {
        NON_FIELD_ERRORS: {
            'invalid_login': u'用户名或密码不正确',
            'inactive': u'帐号禁止登录'
        }
    }

    def clean(self):
        print '###---------ok-----clean----'
        username = self.cleaned_data.get('username')
        password = self.cleaned_data.get('password')
        if username and password:
            self.user_cache = authenticate(username=username,
                                           password=password)
            if self.user_cache is None:
                raise forms.ValidationError(
                    self.error_messages[NON_FIELD_ERRORS]['invalid_login'],
                    code='invalid_login',
                )
            else:
                self.confirm_login_allowed(self.user_cache)
        return self.cleaned_data

页面上采用jinjia2模板,其中django 自带的form封装好了html。建议直接使用如: {{ form.username }} {{ form.username.errors }}{{ form.non_field_errors }}以及更多强大的功能 建议直接去看django关于form的文档。

登出

django登出的话我目前主要处理的是把session清除,然后返回到登录界面,若后续需要新功能再去添加

def logout(request):
    """
    Logs out the user and displays 'You are logged out' message.
    """
    auth_logout(request)

    return HttpResponseRedirect('/')

持续更新中,请期待

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值