视图函数接受到的request到底是个什么对象呢?

HttpRequest对象:

服务器接收到http协议的请求后,会根据报文创建HttpRequest对象视图函数的第一个参数是HttpRequest对象在django.http模块中定义了HttpRequest对象的API

form标签中的GET和POST:

在HTML中,form表单的作用是收集标签中的内容,<form>...</form> 中间可以由访问者添加类似于文本,选择,或者一些控制模块等等.然后这些内容将会被送到服务端。

一个表单必须指定两样东西:

\1. form的method参数用于设置表单的提交方式,默认使用POST.

\2. action用于设置表单的提交url,如果不写或者保持空字符串,那么将使用当前的URL.

form表单使用get方式提交的例子:

在上面的视图中渲染模板,下面的视图处理提交的数据.

get方式提交的数据会在url中显示出来.

1.get提交的参数会在url中显示.

2.可以通过request.GET.get的方法来获取提交的参数.

form表单使用post方式提交的例子:

url的配置

post方式提交的数据不会在url中显示.

1.post的提交方式不会在url中显示参数

2.可以通过request.POST.get方式来获取提交的数据

一键多值的getlist方法:

request对象的属性GET、POST都是QueryDict类型的对象

与python字典不同,QueryDict类型的对象用来处理同一个键带有多个值的情况

  • 方法get():

根据键获取值,如果传送多值,只能获取键的一个值

如果一个键同时拥有多个值,获取最后一值

  • 方法getlist():

根据键获取值将键的值以列表返回

可以获取一个键的多个值

在模板中写上携带get参数的url.

视图中获取参数.

request中GET和POST对象的属性:

GET属性

  • QueryDict类型的对象

  • 包含get请求方式的所有参数

  • 与url请求地址中的参数对应,位于?后面

  • 参数的格式是键值对,如key1=value1

  • 多个参数之间,使用&连接,如key1=value1&key2=value2

POST属性

  • QueryDict类型的对象

  • 包含post请求方式的所有参数

  • 与form表单中的控件对应

  • 表单中控件要有name属性,则name属性的值为键,value属性的值为值,构成键值对提交

  • 对于checkbox控件,name属性一样为一组,当控件被选中后会被提交,存在一键多值的情况.

GET和POST请求方式总结:

  1. GET:GET如其名,是从服务器获取数据,不会更改服务器的状态和数据,在URL中携带参数发送给服务器。

  2. POST则是将一定量的数据发送给服务器,一般会更改服务器的数据。

  3. POST方法的参数不能在URL当中看到,他是通过body参数传递给服务器的,所以相对GET方法直接能在URL当中看到传递的参数,显得更加安全一些.当然,也不能简单的判定POST方法比GET方法更安全,要使网站保持安全,需要做更多的安全处理.

文件上传:

Django在处理文件上传的时候,文件数据被保存在了request.FILES

FILES中的每个键为<input type="file" name="" />中的name

设置文件的存储路径

1.在项目根目录下static中创建media文件夹

2.图片上传后,会被保存到“/static/media/文件”

3.打开settings.py文件,增加media_root项

文件上传form表单中:

FILES只有在请求的方法为POST 且提交的<form>带有enctype="multipart/form-data" 的情况下才会包含数据。否则,FILES 将为一个空的类似于字典的对象

文件上传视图函数:

HttpResponse对象:

content,返回的内容,字节型,上面写错了.

response.write方法,可以分批次写入数据.再拼接

response.content.decode('utf-8')

HttpResponse的子类:

返回数据的响应函数有:

HttpResponse() 返回简单的字符串对象

render() 渲染模板

redirect() 重定向

JsonResponse() 返回json数据

- 帮助用户创建JSON编码的响应

- 参数data是字典对象

- JsonResponse的默认Content-Type为application/json

HTTP协议:

HTTP(超文本传输协议)是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议。

客户端和服务器都是怎么记录登录的状态的呢?

浏览器中的----cookie:

服务器中设置cookie及获取cookie:

注意:设置cookie值以及删除cookie值都是response对象的操作,而获取cookie是从requeset相应中获得的.

虽然cookie可以保存状态 但注意不要存储敏感信息.

在数据库属性中设置:创建mysql数据库要使用utf8mb4字符集,这是一个历史遗留问题,最新的mysql支持的编码.整理collate要选用utf8_bin,怎么对字符进行排序.

写sql时候在=号后面加bynary,主动的使其大小写敏感.

在form表单里加入{% csrf_token %},django自动加入字段

上传文件代码:

def upload(request):
   if request.method == 'POST':
       files = request.FILES.getlist('file',None)
       for file in files:
           day_dir = datetime.now().strftime('%Y%m%d')
           pre_dir = os.path.join(UPLOAD_ROOT,day_dir)
           if not os.path.exists(pre_dir):
               os.mkdir(pre_dir)
           filename = os.path.join(pre_dir,file.name)
           with open(filename,'wb') as f:
               for line in file.chunks():
                   f.write(line)
       return HttpResponse('上传成功')

chunks其实是用底层的socket作,如果你能作这个就非常牛逼了.

Django框架基础知识09-请求与响应的更多相关文章

  1. Django框架基础知识01-配置环境

    Django框架 Django是个怎样的东西呢? Web应用框架----Django  http服务器:用来接受用户请求,并将请求转发给web应用框架进行处理. Web应用框架处理完以后再发送给htt ...

  2. Django框架基础知识12-中间件及上下文处理器

    Django中间件(Middleware) 是一个轻量级.底层的“插件”系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出. django 中的中间件(middleware) ...

  3. Django框架基础知识08-表关联对象及多表查询

    1.自定义主键字段的创建 AutoFiled(pirmary_key=True) # 一般不会自定义,int类型,自增长 一般不自定义主键. 2.order_by asc desc from djan ...

  4. Django框架基础知识02-路由及渲染

    1.URL(Uniform Resoure Locator)统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址.互联网上的每个文件都有一个唯一的URL ...

  5. Django框架基础知识11-会话状态保持及表单

    浏览器存储cookie的方式不太安全,那有没有更好些的来存储登入状态的方式呢??? 状态保持----cookie和session: 状态保持: 1.http协议是无状态的:每次请求都是一次新的请求,不 ...

  6. Django框架基础知识14-类视图

    MTV view视图 wsgi函数 def index(request): .... return HttpResponse() 特定的HTTP方法.get,post可以定义单独的方法 继承,多继承, ...

  7. Django框架基础知识13-auth系统

    我们昨天登录admin时创建的用户信息是存放在哪里了呢? auth系统的数据表: 从表的名称我们就能看出, auth_user,auth_group,auth_permission分别存放了用户,用户 ...

  8. Django框架基础知识10-内置分页系统

    from django.shortcuts import render, redirect, reversefrom datetime import datetime# Create your vie ...

  9. Django框架基础知识07-常用查询及表关系的实现

    1.常用的模型字段类型 https://docs.djangoproject.com/en/2.1/ref/models/fields/#field-types 2.字段的常用参数 官方文档:http ...

随机推荐

  1. 左耳朵耗子:我对 GitLab 误删除数据库事件的几点思考

    参考链接:https://www.infoq.cn/article/some-thoughts-on-gitlab-accidentally-deleting-database 太平洋时间 2017 ...

  2. $BREEZE'S Diary$

    蒟蒻的日记没什么好看的. 2019-01-28 期末砸了. 洛谷开创小号. 开创博客园. 2019-01-29 坐标:义乌中学 咱今天又来义乌中学受虐了 感谢hjf给咱一次爆0的机会 题解 2019- ...

  3. hdu1879 继续畅通工程 基础最小生成树

    #include <cstdio> #include <cstdlib> #include <algorithm> #include <cmath> u ...

  4. spring boot eureka client

    eureka client @EnableDiscoveryClient @SpringBootApplication public class DemoApplication { public st ...

  5. CGI、ASP、PHP、JSP、 ASP.NET网站开发语言比较

    一.主流网站开发语言的简介及优缺点. 现在主流的网站开发语言主要包括cgi.asp.php.asp.net.jsp等. HTML:当然这是网页最基本的语言,每一个服务器语言都需要它的支持. (一)  ...

  6. spring cloud微服务项目的发布与部署

    普通的javaweb项目要发布的话,一般就三种方法: 1.把项目直接放在tomcat的webApps下启动tomcat即可. 2.把项目打包成war包放在webApps下,启动tomcat,自动解压w ...

  7. scau 1144 数星星 bit + 扫描线的思想

    这题如果用二维树状数组,则会直接爆内存. 那么可以运用扫描线的思路. 就是,它同时被x和y限制了,那么可以在查询的时候,确保x先满足了,(把x按小到大排序) 然后就相当于是关于y的一个一维bit了, ...

  8. Unity中所有特殊的文件夹

    1. 隐藏文件夹以.开头的文件夹会被Unity忽略.在这种文件夹中的资源不会被导入,脚本不会被编译.也不会出现在Project视图中.2. Standard Assets在这个文件夹中的脚本最先被编译 ...

  9. 关于c#的结构体struct与class的区别

    C# 结构体 struct C#中结构类型和类类型在语法上非常相似,他们都是一种数据结构,都可以包括数据成员和方法成员. 结构和类的区别: 1.结构是值类型,它在栈中分配空间:而类是引用类型,它在堆中 ...

  10. js调用本地程序

    前几天,做项目时候用到js调用本地的程序,找了好多资料,一种是写入注册表,一种是写一个浏览器插件,相对来说,写一个注册表更简单一点,因为需求很紧.下面就是我的总结,希望可以对你们有所帮助,具体从哪里找 ...