Django框架详细介绍---request对象
几个重要的函数
1.HttpRequest.get_host()
根据从HTTP_X_FORWARDED_HOST(如果打开 USE_X_FORWARDED_HOST,默认为False和 HTTP_HOST 头部信息返回请求的原始主机。如果这两个头部没有提供相应的值,则使用SERVER_NAME 和SERVER_PORT,在PEP 3333 中有详细描述
USE_X_FORWARDED_HOST是一个布尔值,用于指定是否优先使用 X-Forwarded-Host 首部,仅在代理设置了该首部的情况下,才可以被使用。
示例:
"127.0.0.1:8000"
注意:
当主机位于多个代理后面时,get_host() 方法将会失败。除非使用中间件重写代理的首部
2.HttpRequest.get_full_path()
获取当前URL从主机或者端口的第一个"/"到URL末尾的字符串
示例:
URL:
http://127.0.0.1:8000/login/?next=/book_list/
获取结果:
/login/?next=/book_list/
用法:
从一个视图跳转到另外一个视图时,在URL后通过key-value的形式拼接成跳转后的URL,这样子结合get_full_path()和request.GET.get("key")获取到跳转前的URL并跳转回去
示例:在访问某个页面时,如未进行登录认证先跳转到登录界面完成认证再跳转到指定页面
<!--request.get_full_path 获取拼接得到的URL-->
<form action="{{ request.get_full_path }}" method="post">
{% csrf_token %}
<p>用户名:<input type="text" name="username"></p>
<p>密码:<input type="password" name="pwd"></p>
<p><input type="submit" value="登录"></p>
<p style="color: red">{{ err_msg }}</p>
</form>
访问图书列表时需要先登录:
def book_list(request):
# 判断请求里是否有键值对,也就是验证是否登录
login_flag = request.get_signed_cookie("login", default="", salt="jiayanchuli")
# 查看获取收到的是什么
print(login_flag)
if login_flag == "ok":
# 查找出所有书籍
books = models.Book.objects.all()
# 统计书籍数量
total_num = books.count()
# 从url中提取出来当前访问的具体页码
current_page = request.GET.get("page")
from utils import mypage
page_obj = mypage.Page(total_num, current_page, 'book_list')
# 当前页码应该展示的书籍数据
books_list = books[page_obj.data_start:page_obj.data_end]
# 生成分页的页码
page_html = page_obj.page_html()
# 在页面上展示出来
return render(request,
"book_list.html",
{"book_list": books_list,
"page_html": page_html},
)
# 获取当前访问的URL
url = request.path_info
# 拼接URL,并跳转
return redirect("/login/?next={}".format(url))
登录视图上:
def login(request):
if request.method == "POST":
username = request.POST.get("username")
password = request.POST.get("pwd")
user_obj = models.User.objects.filter(username=username, password=password)
if user_obj:
# 通过get("key"),获取登录前跳转到的URL
url = request.GET.get("next")
print(url)
rep = redirect(url)
rep.set_signed_cookie("login", "ok", salt="jiayanchuli")
return rep
else:
return render(request,
"login.html",
{"err_msg": "用户名或密码错误"})
return render(request, "login.html")
3.HttpRequest.get_path_info()
获取到主机或者端口号之后第一个"/"与问号之间的字符串
URL:
http://127.0.0.1:8000/login/?next=/book_list/
获取结果:
/login/
4.HttpRequest.build_absolute_uri(location)
获取location的绝对URL,如果没有提供该参数则默认使用get_full_path()的返回值,如果URI已经是一个绝对URI,则将不会修改,否则将使用请求中的服务器相关的变量构成绝对URI
URL:
http://127.0.0.1:8000/login/?next=/book_list/
获取结果:
http://127.0.0.1:8000/login/?next=/book_list/
5.HttpRequest.get_signed_cookie(key, default=RAISE_ERROR, salt="", max_age=None)
返回签名的Cookie对应的值,如果签名不再合法则返回django.core.signing.BadSignature,如果提供了default参数,将不会引发异常并返回该默认值
可选参数salt,可用来第安全密钥进行加盐提高安全度,max_age参数用来检查Cookie对应的时间戳以确保Cookie的时间不会超过max_age(单位:秒)
Django框架详细介绍---request对象的更多相关文章
- Django框架详细介绍---中间件(认证)
一.绪论 在cookie和session的应用中,通过在视图函数内添加装饰器判断用户是否登录,把没有登录的用户请求跳转到登录页面,通过给几个特定视图函数加装饰器实现了这个需求.但是以后添加的视图函数可 ...
- Django框架详细介绍---视图系统
Django视图系统 1.什么是视图 在Django中,一个视图函数/类,称为视图.实质就是一个用户自定义的简单函数,用来接收WEB请求并xing响应请求,响应的内容可以是一个HTML文件.重定向.一 ...
- Django框架详细介绍---认证系统
在web开发中通常设计网站的登录认证.注册等功能,Django恰好内置了功能完善的用户认证系统 1.auth模块 from django.contrib import auth 模块源码 import ...
- Django框架详细介绍---模型---ORM
一.概述 ORM(Object Relational Mapping),全称:对象关系映射,简单的说就是通过创建类.实例化出对象的方法,使得类.对象.对象的属性能够和数据库中的表.记录.字段意义对应. ...
- Django框架详细介绍---cookie、session、自定义分页
1.cookie 在HTTP协议介绍中提到,该协议是无状态的,也就是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不会直接影响后面的 ...
- Django框架详细介绍---Form表单
一.概述 在HTML页面中,利用form表单向后端提交数据时,需要编写input等输入标签并用form标签包裹起来,与此同时,在很多应用场景之下需要对用户输入的数据校验,例如注册登录页面中,校验用户注 ...
- Django框架详细介绍---请求流程
Django请求流程图 1.客户端发送请求 2.wsgiref是Django封装的套接字,它将客户端发送过来的请求(请求头.请求体封装成request) 1)解析请求数据 2)封装响应数据 3.中间件 ...
- Django框架详细介绍---AJAX
一.概述 1.什么是JSON JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation) JSON 是轻量级的文本数据交换格式 JSON 独立于语言 * ...
- Django框架详细介绍---ORM相关操作---select_related和prefetch_related函数对 QuerySet 查询的优化
Django的 select_related 和 prefetch_related 函数对 QuerySet 查询的优化 引言 在数据库存在外键的其情况下,使用select_related()和pre ...
随机推荐
- golang处理signal
signal一般用来实现优雅重启,或者重新加载配置文件等操作. 废话不多说,上表格 动作 号码 信号 golang kill pid 15 SIGTERM terminated kill -9 pid ...
- Houdini技术体系 基础管线(四) :Houdini驱动的UE4植被系统 下篇
背景 在上篇中,实现了使用Houdini在UE4里根据地形过程生成植被的最基本的原型.并且支持把植被在UE4里Bake成使用的HierarchicalInstancedStaticMeshCompon ...
- Mysql 5.7 安装 解压缩版 忘记密码
[参考]Mysql 命令大全 [参考]MySQL 5.7.19 忘记密码 重置密码 配置文件my.ini示例 服务启动后停止 log配置 [参考]MySQL5.7.19 服务挂掉 自动关闭 mysql ...
- 联想R720面板右下部分按压后和上面按键串联了
如图所示的位置,一用力按压,就会触发键盘的按键. 前提: 本人刚刚加装了内存条,内存条是京东买的 十铨(Team) DDR4 2400 8GB 笔记本内存,安装完内存以后,发现电脑出了这样的问题. 解 ...
- 创建多进程Process
注册一个进程: from multiprocessing import Process import os def func(args): # 在子进程里面.args接收一个参数,如果要接受多个参数使 ...
- Solve Error: Unhandled exception at 0x00905a4d in xxx.exe: 0xC0000005: Access violation.
在使用Visual Studio进行项目开发的时候,有时候会遇到下面这个错误: Unhandled exception at 0x00905a4d in xxx.exe: 0xC0000005: Ac ...
- js中的 substr方法与substring方法 不同
一个参数时: 二者同为 从 第参数个 开始截取,一直到str 末尾,并返回. 二个参数时: substr(a,b): 从第a个字符开始, 截取b个. substring(a,b): 从第a个字符 ...
- oracle数据库字符集查询
1>数据库服务器字符集 select * from nls_database_parameters,其来源于props$,是表示数据库的字符集. 查询结果如下 NLS_LANGUAGE AMER ...
- Android启动页欢迎界面大全 (网址)
地址:http://download.csdn.net/detail/u013424496/9539810
- Prime Flip AtCoder - 2689
发现我们每次区间取反,相邻位置的正反关系只有两个位置发生改变 我们定义bi为ai和ai-1的正反关系,即ai=ai-1时bi=0,否则bi=1,每次取反l~r,b[l]和b[r+1]会发生改变 容易发 ...