配置用户认证登录

在每个URL中,也就是对应Views.py的每个class中都可以对用户是否登录进行判断,如果用户未登录就自动跳转到登录界面

语法为: if request.user.is_authenticated():

本章重点:

from django.contrib.auth import authenticate, login, logout

authenticate Django的authenticate(username,password)实现用户名和密码的认证,而不用我们写逻辑去数据库中判断。

login:      Django的login(request, user) 真正帮我们实现用户登录。

logout:     Django的logout(request) 可以帮我们直接用户注销

View逻辑配置

class LoginView(View):
    """
    登录验证
    """
    def get(self, request):
        return render(request, "login.html", {})

    def post(self, request):
        login_form = LoginForm(request.POST)
        if login_form.is_valid():
            user_name = request.POST.get("username", "")
            pass_word = request.POST.get("password", "")
            user = authenticate(username=user_name, password=pass_word)
            if user:
                if user.is_active:
                    login(request, user)
                    return render(request, "index.html")
                else:
                    return render(request, "login.html", {"msg": u"用户还未激活!"})
            else:
                return render(request, "login.html", {"login_form": login_form, "msg": u"用户名或密码错误!"})
        else:
            return render(request, "login.html", {"login_form": login_form})

 

配置 urls.py

 添加index,login

from users.views import LoginView

urlpatterns = [
url(r'^login/$', LoginView.as_view(), name="login"),
]

 

index页面代码,登录部分

这里需要注意使用 request.user.is_authenticated方法, 可以检查用户是否登录,然后进行逻辑判断

{% if request.user.is_authenticated %}
    <div class="top">
    <div class="wp">
        <div class="fl"><p>服务电话:<b>33333333</b></p></div>
        <!--登录后跳转-->
        ......
    </div>
</div>
    {% else %}
    <div class="top">
    <div class="wp">
        <div class="fl"><p>服务电话:<b>33333333</b></p></div>

            <a style="color:white" class="fr registerbtn" href="{% url "register" %}">注册</a>
            <a style="color:white" class="fr loginbtn" href="{% url "login" %}">登录</a>

    </div>
</div>
{% endif %}

 

login页面代码

<form action="{% url "login" %}" method="post" autocomplete="off">
    <div class="form-group marb20 {% if login_form.errors.username %}errorput{% endif %}">
        <label>&nbsp;&nbsp;</label>
        <input name="username" id="account_l" value="{{ login_form.username.value }}" type="text" placeholder="手机号/邮箱" />
    </div>
    <div class="form-group marb8 {% if login_form.errors.password %}errorput{% endif %}">
        <label>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</label>
        <input name="password" id="password_l" value="{{ login_form.password.value }}" type="password" placeholder="请输入您的密码" />
    </div>
    <div class="error btns login-form-tips" id="jsLoginTips">{% for key,error in login_form.errors.items %}{{ error }}{% endfor %}{{ msg }}</div>
     <div class="auto-box marb38">

        <a class="fr" href="forgetpwd.html">忘记密码?</a>
     </div>
     <input class="btn btn-green" id="jsLoginBtn" type="submit" value="立即登录 > " />
{% csrf_token %}
</form>

 

logoutView

这里利用 django.core.urlresolvers.reverse 实现 index页面反转,通过url将index页面跳转给用户。

如果直接使用return render(request, "index")  url不会改变,还是在logout.

class LoginoutView(View):
    """
    用户注销
    """
    def get(self, request):
        logout(request)
        from django.core.urlresolvers import reverse
        return HttpResponseRedirect(reverse("index"))

 

posted @ 2017-03-01 00:21  Vincen_shen  阅读(529)  评论(0)    收藏  举报