Django 10 GET和POST(HttpRequest对象,GET和POST请求,文件上传,HttpResponse对象的cookie)
Django 10 GET和POST(HttpRequest对象,GET和POST请求,文件上传,HttpResponse对象的cookie)
一、HttpRequest对象
#HttpRequest对象
#服务器接受到Http协议的请求后,会根据报文创建HttpRequest对象,视图函数的第一个参数是HttpRequest对象在django.http模块中定义的HttpRequest对象的API #属性:
path #一个字符串,表示请求的页面的完整路径,不包括域名
method #一个字符串,表示请求使用的HTTP方法,常用值包括:‘GET’,'POST'
encoding #一个字符串,表示提交的数据的编码方式;如果是None则表示使用浏览器的默认设置,一般设置为utf-8
#这个属性是可写的,可以通过修改它来修改访问表单数据使用的编码,接下来对属性的访问将使用新的encoding值
GET # 一个类似于字典的对象,包括get请求方式的所有参数
POST # 一个类似于字典的对象,包括post请求方式的所有参数
FILES # 一个类似于字典的对象,包括所有的上传文件
Cookie # 一个标准的python字典,包括所有的cookie,键值都是字符串
session # 一个既可读又可写的类似于字典的对象,表示当前的会话,只有放Django启用会话的支持是时才可用,详细内容见‘状态保持’ #方法
is_ajax() #如果请求是通过XMHttpRequest发起的,则返回True
form标签的GET和POST
#在HTML中,form表单的作用是收集标签中的内容,<form>...</form>中间可以由访问者添加类似于文本、选择、或者一些控制模块的等待,那么这些内容会将被送到服务端 #一个表单必须指定两样东西:
#1、form的method参数用于设置表单的提交方式,默认设置为POST
#2、action用于设置表单的提交url,如果不写或者保持空字符串,那么将使用当前的url
#get方式
#1、get提交的参数会在url中显示
#2、可以通过request.GET.get的方式获取提交的参数
一键多值的getlist方法
#request对象的属性GET,POST都是querydict类型的对象,与Python字典不同,querydict类型的对象用来处理同一个键带有多个值的情况 #get()方法
#根据键获取值,只能获取键的一个值
#如果一个件拥有多个值,只能获取最后一个值 #getlist()方法
#根据键获取值将值以列表返回,可以获取一个键的多个值
request中GET和POST对象的属性
GET属性 POST属性
-Querydict类型的对象 -Querydict类型的对象
-包含get请求方式的所有参数 -包含get请求方式的所有参数
-与url请求地址中的参数对于,位于?后面 -与form表单中的控件对应
-参数的格式是键值对,如key1=value1 -表单中空间要有name属性,则name属性的值为键,value属性的值为值,构成键值对提交
-多个参数之间,使用&连接,如key1=value1&key2=value2 -对于checkbox空间,name属性一样为一组,当控件被选中后会提交,存在一键多值的情况
总结
#1、GET:如其名,是从服务器获取数据,不会改变服务器的状态和数据,在url中携带参数发送给服务器
#2、POST则是将一定量的数据发送给服务器,一般会更改服务器的数据
#3、POST方法的参数不能再URL当中看到,他会说通过body参数传递给服务器,所以相对GET方法直接在URL当中看到传递的参数,显得更加安全一些。
当然,也不能简单的判定POST方法比GET方法更安全,要是网站保持安全,需要做更多的安全处理
二、文件上传
#1、在static目录下创建一个media目录 #2、在settings.py里面 129行添加,下面那个路径是用来存放文件的路径
STATICFILES_DIRS = [
os.path.join(BASE_DIR,'static')
] MEDIA_ROOT = os.path.join(BASE_DIR,'static/media') #3、上传模板
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>文件上传</title>
</head>
<body>
<form action="" method="post" enctype="multipart/form-data"> {% csrf_token %} <!要上传文件必须添加上enctype >
<input type="file" name="file"> <br>
<input type="submit" value="上传">
</form>
</body>
</html>
#4、视图函数
import os
from myblog.settings import MEDIA_ROOT #从主目录下导入地址
def upload(request):
if request.method == 'GET':
return render(request,'test11/update.html')
elif request.method == 'POST':
f = request.FILES.get('file') #获取文件名称
f_name = os.path.join(MEDIA_ROOT,f.name) #路径和文件名拼接到一起,作为文件存放的位置
with open(f_name,'wb') as ff: #以'wb'方式打开路径并赋值给ff
for c in f.chunks(): #以chunks方法来读
ff.write(c) #写入
return HttpResponse(55555)
else:
return HttpResponse('错误')
三、response对象的cookie处理
#HttpResponse对象 #属性
content #表示返回的内容,字符串类型
charser #表示response采用的编码字符集,字符串类型
status_code #响应的HTTP响应状态码
content-type #指定输出的MIME类型 #方法:
init #使用页内容实例化HttpResponse
write(content) #以文件的方式写
flush() #以文件的方式输出缓存区 set_cookie(key,value='',max_age=None,expires=None) #设置cookie
key、value #字符串类型
max_age #整数,表示在指定秒数后过期
expires #是一个datetime或者timedelta对象,会话将在这个指定的日期/时间过期,注意datetime和timedelta值只有在使用PickleSerializer时才可序列化
#max_age和expires二选一,如果不指定过期时间,则关闭浏览器就失效 delete_cookie(key) #删除指定的key的Cookie,如果key不存在则说明都不发生
def resp_test(request):
rs = HttpResponse(6666666666) #rs为响应对象
print(rs.content) #表示返回的内容,字符串类型
print(rs.charset) #表示response采用的编码字符集,字符串类型
print(rs.status_code) #响应的HTTP响应状态码
# print(rs.content_type_for_repr) #指定输出的MIME类型
return rs
JsonResponse 返回的是json数据(字典)
def json_test(request):
return JsonResponse({'abc':''})
HTTP协议
设置、获取、删除cookie
from datetime import datetime
def set_cookie(request):
response = HttpResponse('设置cookie')
response.set_cookie('name','taka')
response.set_cookie('name','taka',max_age=60) #指定60秒以后过期
response.set_cookie('name','taka',expires=datetime(2018,8,3)) #指定具体时间过期
return response def get_cookie(request):
cookie = request.COOKIES #从request里面获取cookie
print(cookie.get('name'))
return HttpResponse('获取cookie') def delete_cookie(request):
rs = HttpResponse('删除cookie')
rs.delete_cookie('name')
return rs
Django 10 GET和POST(HttpRequest对象,GET和POST请求,文件上传,HttpResponse对象的cookie)的更多相关文章
- 潭州课堂25班:Ph201805201 django框架 第十课 GET,POST 请求 文件上传,HttpResponse,cookie (课堂笔记)
在项目中新建个APP, 在主目录中的配置文件中进行 APP 注册 在主目录中的 urls 文件中进行路径分配 新建 urrls 文件 进行分路由配置 创建模板文件 html 文件 写个 form 表单 ...
- $Django 虚拟环境,2.0、1.0路由层区别,Httprequest对象,视图层(fbv,cbv),文件上传
1 虚拟环境:解决问题同一台机器上可以运行不同版本的django, 1 用pychanrm创建--->files-->newproject--->选择虚拟环境 2 setting ...
- spring mvc文件上传,request对象转换异常
spring 文件上传有现成的工具用起来也挺简单.就是在还不是非常熟悉的时候可能会出一些错. 近期碰到了 org.apache.catalina.connector.RequestFacade can ...
- Django框架之第四篇(视图层)--HttpRequest对象、HttpResponse对象、JsonResponse、CBV和FBV、文件上传
视图层 一.视图函数 一个视图函数,简称视图,是一个简单的python函数,它接收web请求并且会返回web响应.响应可以是一张网页的html,一个重定向,或者是一张图片...任何东西都可以.无论是什 ...
- Django框架(五)-- 视图层:HttpRequest、HTTPResponse、JsonResponse、CBV和FBV、文件上传
一.视图函数 一个视图函数,简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应.响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. ...
- Django框架(六)—— 视图层:HttpRequest、HTTPResponse、JsonResponse、CBV和FBV、文件上传
目录 视图层 一.视图函数 二.视图层之HttpRequest对象 三.视图层之HttpResponse对象 四.视图层之JsonResponse对象 五.CBV和FBV 六.文件上传 视图层 一.视 ...
- Dajngo——10 请求与响应 文件上传 GET和POST请求 类视图
Dajngo——10 HttpRequest对象 HttpResponse对象及子类 form标签中的GET和POST GET提交方式 POST提交方式 request得GET和POST属性 文件上传 ...
- Day21 Django之Form文件上传、原生Ajax和实现抽屉实例
一.Form文件上传 """ Django settings for prev_chouti project. Generated by 'django-admin st ...
- python 全栈开发,Day75(Django与Ajax,文件上传,ajax发送json数据,基于Ajax的文件上传,SweetAlert插件)
昨日内容回顾 基于对象的跨表查询 正向查询:关联属性在A表中,所以A对象找关联B表数据,正向查询 反向查询:关联属性在A表中,所以B对象找A对象,反向查询 一对多: 按字段:xx book ----- ...
随机推荐
- elasticsearch 概念与架构(3)
转自:https://devops.taobao.com/ Node(节点):单个的装有Elasticsearch服务并且提供故障转移和扩展的服务器. Cluster(集群):一个集群就是由一个或多个 ...
- clearfix的用法(转)
clearfix的用法 (2013-12-31 10:41:24) 标签: clearfix 清除浮动 clearboth height zoom 分类: 网页制作 如果有一个DIV作为外部容器,内部 ...
- Eclipse安装Web/JavaEE插件、Eclipse编写HTML代码
1 Eclipse没有Web插件和JavaEE插件咋整 1.1 在Eclipse中菜单help选项中选择install new software选项 1.2 在work with 栏中输入 http: ...
- 1003 NOIP 模拟赛Day2 城市建设
题面不好找放一个吧. Description 描述 在有$N$个地级市的H省,政府为了城市开发建设,决定先修路,后造房子,以吸引外来人员.一开始每个城市中有$b_i$个住户,而在两个城市$u,v$之间 ...
- python3-打印一个进度条
# Auther: Aaron Fan import sys,time for i in range(30): #打印一个#号,这种方法打印不会自动换行 sys.stdout.write('#') # ...
- 数学基础-3D空间的位置表示
转自:http://www.cnblogs.com/gaoxiang12/p/5113334.html 刚体运动 本篇讨论一个很基础的问题:如何描述机器人的位姿.这也是SLAM研究的一个很基本的问题. ...
- spark sql建表的异常
在使用spark sql创建表的时候提示如下错误: missing EOF at 'from' near ')' 可以看下你的建表语句中是不是create external table .... ...
- Charles常见问题汇总
Charles是一款很好用的抓包修改工具,但是如果你不是很熟悉这个工具的话,肯定会遇到各种感觉很莫名其妙的状况,这里就来帮你一一解答下面再说说charles的一些其他常用的功能. 选择请求后,右键可以 ...
- 读取txt文件将文本行组合成特定格式
有一网友要求从txt文本文件读取一些数据,然后组合为特定格式的数据行.原论题如下,刚才开始的要求描述得不太清楚,后来补充完整了. Insus.NET觉得本论题可有练习文本件读取功力,因此尝试实现一下. ...
- 【IMOOC学习笔记】多种多样的App主界面Tab实现方法(三)
FragmentPagerAdapter+ViewPager 与之前直接用ViewPager不同的是,数组里面放的不再是View,而是Fraagment; 使用FragmentPagerAdapter ...