创建app
`startapp account`
settings增加配置
~~~
'account'
~~~
新建forms.py
~~~
# _*_ coding:utf-8 _*_
__author__ = 'canmeng'
__date__ = '2018/1/8 12:54'
from django import forms
class LoginFrom(forms.Form):
username = forms.CharField()
password = forms.CharField(widget=forms.PasswordInput)
~~~
view配置
~~~
# _*_ coding:utf-8 * _*_
from django.shortcuts import render
#引入系统模块
from django.http import HttpResponse
#引入内置用户管理
from django.contrib.auth import authenticate, login
#引入forms类
from .forms import LoginFrom
# Create your views here.
def user_login(request):
#method是HttpRequest对象的一个常用属性,可返回POST、GET
if request.method == "POST":
login_form = LoginFrom(request.POST)
#is_valid验证传入数据是否合法性
if login_form.is_valid():
#cleaned_data引用一个字典类型数据
cd = login_form.cleaned_data
#authenticate检验数据库帐号密码是否正确
user = authenticate(username=cd['username'], password=cd['password'])
#login引入的login()函数,已语句user实例对象作为参数,实现用户登录,登录后调用session
if user:
#判断正确返回HttpResponse
login(request, user)
#redirect跳转
#return redirect("blog:blog_title")
return HttpResponse("Wellcome YOU")
else:
return HttpResponse("Sorry")
if request.method == "GET":
login_form = LoginFrom()
return render(request, "account/login.html", {"form":login_form})
~~~
login.html样板
~~~
{% extends "base.html" %}
{% block title %}登录页面{% endblock %}
{% block content %}
<h1>系统登录</h1>
<p>用户登录</p>
<form class="form-horizontal" action="." method="post">{% csrf_token %}
{# {{ form.as_p }}#}
<label for="{{ form.username.id_for_lab }}">帐号</label>
<div>{{ form.username }}</div>
<label for="{{ form.password.id_for_lab }}">密码</label>
<div>{{ form.password }}</div>
<input type="submit" value="登录">
</form>
{% endblock %}
~~~
配置app urls
~~~
# _*_ coding:utf-8 _*_
__author__ = 'canmeng'
__date__ = '2018/1/7 19:16'
from django.conf.urls import url
#引入app项目 view
from .import views
from django.conf import settings
urlpatterns = [
url(r'^login/$', views.user_login, name="user_login"),
]
~~~
配置项目urls
~~~
urlpatterns = [
#url(r'^admin/', admin.site.urls),
url(r'^xadmin/', xadmin.site.urls),
url(r'^blog/', include('blog.urls', namespace='blog')),
url(r'^accout/', include('account.urls', namespace='account')),
]
~~~
判断用户登录后显示文件
header.html样板
~~~
{% load staticfiles %}
<div class="container">
<nav class="navbar navbar-default" role="navigation">
<div class="nav-header">
<a class="navbar-brand" href="http://www.baidu.com"><img src="{% static '/static/images/logo.jpg' %}" width="100px"></a>
</div>
<div>
<ul class="nav navbar-nav" role="navigation">
<li><a href="{% url 'blog:blog_title' %}">BLOG</a> </li>
</ul>
<ul class="nav navbar-nav navbar-right">
{# <li><a href="{% url 'account:user_login' %}">Login</a> </li>#}
{# #判断用户登录后显示内容is_authenticated内置函数#}
{% if user.is_authenticated %}
<li><a href="#">{{ user.username }}</a> </li>
{# #account:user_logout用户退出#}
<li><a href="{% url 'account:user_logout' %}">Logout</a> </li>
{% else %}
{# #account:user_login用户登录#}
<li><a href="{% url 'account:user_login' %}">Login</a> </li>
{% endif %}
</ul>
</div>
</nav>
</div>
~~~
**第二版本引用系统自带登录、退出**
**配置项目urls**
~~~
# _*_ coding:utf-8 _*_
__author__ = 'canmeng'
__date__ = '2018/1/7 19:16'
from django.conf.urls import url
#引入app项目 view
from .import views
from django.conf import settings
#引入系统自动登录views
from django.contrib.auth import views as auth_views
urlpatterns = [
#url(r'^login/$', views.user_login, name="user_login"),#自建系统登录
url(r'^login/$', auth_views.login, name="user_login"),#引入系统自带views登录
# url(r'^logout/$', auth_views.logout, name="user_logout"),#引入系统自带views退出
#用户退出,定义连接"template_name": "account/logout.html"
url(r'^logout/$', auth_views.logout, {"template_name": "account/logout.html"}, name="user_logout"),
]
~~~
logout.html样板
~~~
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
安全退出
<a href="{% url 'blog:blog_title' %}">返回首页</a>
</body>
</html>
~~~
settings.py配置增加
~~~
#判断用户登录后重定向访问地址
LOGIN_REDIRECT_URL = '/blog/'
~~~
**备注:因为引用的auth_views.login,所以需要根据系统自带配置修改 registration/login.html文件**