Django视图
Posted 落花无意溪自流
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django视图相关的知识,希望对你有一定的参考价值。
需求:开发一个用户登录功能
1、写一个登录功能
前端页面
首先从前端页面开始,打开.../sign/templates/index.html,开发一个表单
<html> <head> <title>Django Page</title> </head> <body> <h1>发布会管理</h1> <form method="post"> <input name="username" type="text" placeholder="请输入用户名"><br> <input name="password" type="password" placeholder="请输入密码"><br> <button id="btn" type="submit">登录</button> </form> </body> </html>
启动Django服务,访问:http://127.0.0.1:8000/index/ 如图所示
登录,弹出“CSRF verification failed. Request aborted.”,这是因为CSRF(Cross-site request forgery)跨站请求伪造,Django针对CSRF的保护措施是在生成的每个表单中放置一个自动生成的令牌,通过这个令牌判断POST请求是否来自同一个网站。这里要用到Django的“标签模板”添加CSRF令牌。
...... <form method="post"> <input name="username" type="text" placeholder="请输入用户名"><br> <input name="password" type="password" placeholder="请输入密码"><br> <button id="btn" type="submit">登录</button> {% csrf_token %} </form> ......
刷新,重新登录,错误提示消失了。
也可以注释掉CSRF请求,在../guest/settings.py中
\'django.middleware.csrf.CsrfViewMiddleware\',
处理登录请求
1、form表单的action属性指定提交的路径。打开inde.html文件,添加如下:
form method="post" action="/login_action/">
2、添加路由,打开../guest/urls.py
url(r\'^login_action/$\', views.login_action),
3、添加视图,打开sign/views.py,添加login_action函数
from django.http import HttpResponse from django.shortcuts import render # Create your views here. def index(request): return render(request, "index.html") def login_action(request): if request.method == \'POST\': username = request.POST.get(\'username\', \'\') password = request.POST.get(\'password\', \'\') if username == \'admin\' and password == \'admin123\': return HttpResponse(\'login success!\') else: return render(request, \'index.html\', {\'error\': \'username or password error!\'})
4、前端添加返回错误信息的地方,打开inde.html,使用Django的模板
<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>
{{ error }} 对应render返回的字典中的key,即“error”,登录失败页面中显示对应的value,即‘username or password error!’
5、刷新页面,登录。
将登录请求跳转到指定页面
1、创建../templates/event_manage.html页面
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Event Manage Page</title> </head> <body> <h1> Login Success! </h1> </body> </html>
2、修改views.py文件
from django.http import HttpResponseRedirect from django.shortcuts import render # Create your views here. def index(request): return render(request, "index.html") def login_action(request): if request.method == \'POST\': username = request.POST.get(\'username\', \'\') password = request.POST.get(\'password\', \'\') if username == \'admin\' and password == \'admin123\': return HttpResponseRedirect(\'/event_manage/\') else: return render(request, \'index.html\', {\'error\': \'username or password error!\'}) # 发布会管理 def event_manage(request): return render(request, "event_manage.html")
HttpResponseRedirect类可以对路径重定向,从而将登录请求成功的请求指向/event_manage/目录
3、添加路由
url(r\'^event_manage/$\', views.event_manage),
4、刷新,登录
Cookie的使用
修改.../sign/views.py文件:
def login_action(request): if request.method == \'POST\': username = request.POST.get(\'username\', \'\') password = request.POST.get(\'password\', \'\') if username == \'admin\' and password == \'admin123\': response = HttpResponseRedirect(\'/event_manage/\') # 添加cookie: key,value,有效期 response.set_cookie(\'user\', username, 3600) return response else: return render(request, \'index.html\', {\'error\': \'username or password error!\'}) # 发布会管理 def event_manage(request): username = request.COOKIES.get(\'user\', \'\') # 读取浏览器cookie return render(request, "event_manage.html", {"user": username})
修改.../templates/event_manage.html页面,添加<div>标签来显示用户登录的用户名:
<div style="float: right;"> <a>嘿!{{ user }} 欢迎</a><hr/> </div>
刷新,重新登录,如下图所示:
session的使用
1、修改一下代码
修改.../sign/views.py文件,在login_action函数中,将:
response.set_cookie(\'user\',username,3600)
替换为:
request.session[\'user\']=username #将session信息记录到浏览器
在event_manage函数中,将:
username=request.COOKIES.get(\'user\',\'\')
替换为:
username=request.session.get(\'user\',\'\') #读取浏览器session
2、创建一个存session的数据库sqlite
python manage.py migrate
3、刷新,登录
2、Django认证系统
登录admin后台
1、创建admin后台用户名密码:python manage.py createsuperuser
设置用户名/密码:admin / zlm111222
2、通过URL地址:http://127.0.0.1:8000/admin/ 来访问Django自带的Admin管理后台
引用Django认证登录
打开.../sign/views.py文件修改login_action函数
def login_action(request): if request.method == \'POST\': username = request.POST.get(\'username\', \'\') password = request.POST.get(\'password\', \'\') # 使用authenticate()函数认证给出的用户名和密码。它接受两个参数,用户名username和密码password # 并在用户名密码正确的情况下返回一个user对象。如果用户名密码不正确,则authenticate()返回None user = auth.authenticate(username=username, password=password) if user is not None: auth.login(request, user) # 登录 request.session[\'user\'] = username # 将session信息记录到浏览器 response = HttpResponseRedirect(\'/event_manage/\') return response else: return render(request, \'index.html\', {\'error\': \'username or password error!\'})
关上窗户
1、http://127.0.0.1:8000/event_manage/ 可以直接打开登录成功页,我们需要把这个窗户关上,只需要如下修改:
from django.contrib import auth ..... # 发布会管理 @login_required def event_manage(request): username = request.session.get(\'user\', \'\') return render(request, "event_manage.html", {"user": username})
再次尝试访问/event_manage/目录(千万不要忘记清理浏览器缓存再试!),Django会告诉访问的路径并不存在(404)。
2、修改.../urls.py文件,添加以下路径
url(r\'^accounts/login/$\', views.index),
现在访问以下url都能跳转到登录页面了
http://127.0.0.1:8000/
http://127.0.0.1:8000/index/
http://127.0.0.1:8000/event_manage/
以上是关于Django视图的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Django Summernote 中显示编程片段的代码块?
django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE的解决办法(转)(代码片段
django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE的解决办法(转)(代码片段