一、登录功能
- 打开“.../sign/templates/index.html”文件,如果没有就新建一个,开发登录前端页面。
index.html
<html>
<head>
<title>Django Page</title>
</head>
<body>
<h1>发布会管理</h1>
<form method="post" action="/login_action/">
<input name="username" type="text" placeholder="用户名"/><br/>
<input name="password" type="password" placeholder="密码"/><br/>
{{ error }} <br/>
<button id="btn" type="submit">登录</button>
{% csrf_token %}
</form>
</body>
</html>
- 启动Django服务,访问 “http://127.0.0.1:8000/index/”,如下图
- 当输入用户名、密码并点击“登录”按钮之后,登录表单(form)中的数据以POST方式提交到服务器端。
-
“ {% csrf_token %}”是Django针对CSRF的保护措施在生成的每个表单中放置一个自动生成的令牌,通过这个令牌判断POST请求是否来自同一个网站。
注:如果想忽略CSRF的检查,可以在.../ex_signsys/settings.py 文件中注释掉 csrf。
- 通过form表单的action属性来指定提交的路径 action="/login_action"。
6.打开.../ex_signsys/urls.py 文件添加 login_action/的路由。
from sign import views # fgh 导入sign应用views文件
from django.conf.urls import url, include
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^index/$', views.index),
url(r'^accounts/login/$', views.index),
url(r'^login_action/$', views.login_action), # 添加 login_action/的路由
]
- 登录请求由 views.py 视图文件的 login_action 函数来处理, 打开 sign/views.py文件,创建 login_action 视图函数。
def login_action(request):
if request.method == 'POST':
username = request.POST.get('username', '')
password = request.POST.get('password', '')
user = auth.authenticate(username=username, password=password)
if user is not None: #username == 'admin' and password == '112233':
auth.login(request, user)
#response.set_cookie('user', username, 3600) # 添加浏览器cookie
request.session['user'] = username # 将session信息记录到session
response = HttpResponseRedirect('/event_manage/')
return response
#return HttpResponse('login success!')
else:
return render(request, 'index.html', {'error': 'username or password error!'})
二、登出功能
- 打开 .../urls.py文件,添加退出路径的路由。
# 添加退出路径的路由
urlpatterns = [
......
url(r'^logout/$', views.logout),
]
- 打开 .../sign/views.py 文件,创建logout()视图函数。
# 退出登录
@login_required
def logout(request):
auth.logout(request) # 退出登录,Diango中auth.logout()方法用于系统的退出,可以清除浏览器保存的用户信息。
response = HttpResponseRedirect('/index/')
return response
- 当退出成功后默认跳转到/index/路径,即用户登录页面。
三、涉及的技术点
- GET与POST 请求
当客户端通过HTTP协议向服务器提交请求时,最常用到的方法就是 GET 和 POST.
- GET:从指定的资源请求数据。
- POST:向指定的资源提交要被处理的数据。
- Cookie和Session
- Django认证系统