首页 > 其他分享 >46、django工程(view)

46、django工程(view)

时间:2022-10-10 12:31:21浏览次数:57  
标签:重定向 46 request django 对象 POST view 请求


46.1、django view 视图函数说明:

1、http请求中产生两个核心对象:

(1)http请求:HttpRequest对象。

(2)http响应:HttpResponse对象。


2、views 函数是接收用户请求,处理业务逻辑的函数:

46、django工程(view)_重定向


46.2、HttpRequest 对象的属性和方法:

1、path:

请求页面的全路径,不包括域名。


2、method:

请求中使用的HTTP方法的字符串表示。全大写表示。

例如:

if req.method == "GET":

do_something()

elseif req.method == "POST":

do_something_else()


3、GET:

包含所有HTTP GET参数的类字典对象。


4、POST:

包含所有HTTP POST参数的类字典对象。

服务器收到空的POST请求的情况也是可能发生的,也就是说,表单 form 通过 HTTP POST 方法提交请求,

但是表单中可能没有数据,因此不能使用 if request.POST 来判断是否使用了 HTTP POST 方法。应该使用

if request.method == "POST" 来判断。


5、COOKIES:

包含所有 cookies 的标准 Python 字典对象,keys 和 values 都是字符串。

6、FILES:

包含所有上传文件的类字典对象,FILES 中的每一个 Key 都是 <input type="file" name="" /> 标签中

name 属性的值,FILES 中的每一个 value 同时也是一个标准的 python 字典对象,包含下面三个Keys:

filename:上传文件名,用字符串表示。

content_type:上传文件的 Content Type。

content:上传文件的原始内容


7、user:

是一个 django.contrib.auth.models.User 对象,代表当前登陆的用户。如果访问用户当前没有登陆,user

将被初始化为 django.contrib.auth.models.AnonymousUser 的实例。你可以通过 user 的

is_authenticated() 方法来辨别用户是否登陆。if request.user.is_authenticated() 只有激活 Django 中的

'django.contrib.auth.middleware.AuthenticationMiddleware' 时该属性才可用。


8、session:

唯一可读写的属性,代表当前会话的字典对象。只有激活 Django 中的

'django.contrib.sessions.middleware.SessionMiddleware' 时该属性才可用。


9、get_full_path():

比如访问:http://127.0.0.1:8080/blog/index/?name=123

request.get_full_path() 得到的结果就是 /blog/index/?name=123,request.path 得到的结果是 /blog/index/。


10、get_port():

获得 django 服务的端口号。


11、POST 获得表单数据:

(1)获得单个数据(比如 input 框):

request.POST.get('')


(2)获得列表数据(比如 select 框):

request.POST.getlist('')


46.3、HttpResponse 对象:

1、说明:

对于 HttpRequest 对象来说,是由 django 自动创建的,但是 HttpResponse 对象就必须我们自己创建。每个 view

请求处理方法必须返回一个 HttpResponse 对象。引用 HttpResponse 模块的方法为

from django.shortcuts import HttpResponse。


2、在 HttpResponse 对象上扩展的常用方法:

(1)页面渲染:render(request, <".html文件">)

(2)页面跳转:redirect("路径")

(3)locals():可以直接将函数中所有的变量传给模板。

(4){"<自定以变量名>":<变量>, ......}:根据需要将函数中的变量传给模板。


3、render 和 redirect 的区别:

(1)区别:

render 返回页面内容(渲染变量到模板中),并且没有发送第二次请求,用户浏览器上的 URL 地址不会发生改变。

redirect 发送了第二次请求,是个跳转函数,而且会返回重定向 302 的状态码,用户浏览器上的 URL 地址会发生改变。


(2)补充,什么是重定向:

重定向指的是 HTTP 重定向,它是 HTTP 协议规定的一种机制。这种机制是这样工作的,当 client 向 server 发送一个

请求,要求获取一个资源时,在 server 接收到这个请求后发现请求的这个资源实际存放在另一个位置,于是 server 在

返回的 response 中写入那个请求资源的正确的 URL,并设置 reponse 的状态码为 302,表示这是一个要求浏览器重

定向的response,当 client 接受到这个 response 后就会根据新的 URL 重新发起请求。重定向有一个典型的特征,即

当一个请求被重定向以后,最终浏览器上显示的URL往往不再是开始时请求的那个URL了,这就是重定向的由来。

302 重定向:只是暂时的重定向。应用场景:未登陆的用户访问用户中心重定向到登录页面,访问404页面会重新定向到首页。

301 重定向:是永久的重定向。 应用场景:域名跳转。


(3)小结:

1)reader(request,'.html'):

返回的是template页面,不会改变url地址。

2)redict("url"):

返回的是url地址,会改变url地址。














标签:重定向,46,request,django,对象,POST,view,请求
From: https://blog.51cto.com/u_11409186/5743160

相关文章

  • 手把手教你使用LabVIEW OpenCV dnn实现物体识别(Object Detection)含源码
    前言今天和大家一起分享如何使用LabVIEW调用pb模型实现物体识别,本博客中使用的智能工具包可到主页置顶博客LabVIEWAI视觉工具包(非NIVision)下载与安装教程中下载一、物......
  • Django中related_name作用
    Django中related_name作用相当于我们使用related代替了在通过一个对象查询出多个对象集合时,使用表名_set来获取我先定义两个模型,一个是作者,一个是作者出版的书籍,算是一对......
  • nginx+uwsgi 部署 django项目
    一、nginx:1.目录结构、常用命令和查杀进程:/usr/sbin/nginx:主程序/etc/nginx:存放配置文件/usr/share/nginx:存放静态文件/var/log/nginx:存放日志2.命令:servicenginxsta......
  • Django-debug-toolbar的使用
    Django-debug-toolbar,该工具为我们提供了更加丰富的调试信息,如sql语句,信号,缓存等数据查询。install: pipinstalldjango-debug-toolbar usage:基本配置:1、先......
  • 第 46 届 ICPC 国际大学生程序设计竞赛亚洲区域赛(沈阳)
    有时候,很简单的模板题,可能有人没有做出来,(特指I),到时候一定要把所有的题目全部看一遍目录B题解EF题解HI题解&代码JB输入样例32121231输出样例1说明In......
  • 洛谷 P6146
    由于博主是只鸽子,所以咕咕咕。()不,应该是目录不在更新,请关注博客首页。有空我把目录更新一下,好久不更了传送门YouareMiserable(ATLv.15)思路Stage1这题其实是个......
  • Django2.0——cookie、session的简单处理
    1.cookie设置ifuserResultanduserResult.is_active: response=redirect(to='/') response.set_cookie("username",username,max_age=3600) context["username"]=use......
  • Android RecyclerView的ItemAnimator (item的刷新动画)
    前言notifyItemChanged()在更新的时候会执行ItemAnimator动画,默认是闪烁的动画,此动画可以自定义。取消默认闪烁动画valanimator=mBinding.applyList.it......
  • CentOS 7.9 安装 django-3.2.10
    一、CentOS7.9安装django-3.2.10地址https://www.djangoproject.comhttps://github.com/django/django二、安装django先得安装pythonpython3python3-Vpip3-......
  • Django 限制字符串展示,超过30个展示...
    defshort_process_all(self):iflen(str(self.process_all))>30:return'{}...'.format(str(self.process_all)[0:29])else:......