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)的更多相关文章

  1. 潭州课堂25班:Ph201805201 django框架 第十课 GET,POST 请求 文件上传,HttpResponse,cookie (课堂笔记)

    在项目中新建个APP, 在主目录中的配置文件中进行 APP 注册 在主目录中的 urls 文件中进行路径分配 新建 urrls 文件 进行分路由配置 创建模板文件 html 文件 写个 form 表单 ...

  2. $Django 虚拟环境,2.0、1.0路由层区别,Httprequest对象,视图层(fbv,cbv),文件上传

    1 虚拟环境:解决问题同一台机器上可以运行不同版本的django,  1 用pychanrm创建--->files-->newproject--->选择虚拟环境  2 setting ...

  3. spring mvc文件上传,request对象转换异常

    spring 文件上传有现成的工具用起来也挺简单.就是在还不是非常熟悉的时候可能会出一些错. 近期碰到了 org.apache.catalina.connector.RequestFacade can ...

  4. Django框架之第四篇(视图层)--HttpRequest对象、HttpResponse对象、JsonResponse、CBV和FBV、文件上传

    视图层 一.视图函数 一个视图函数,简称视图,是一个简单的python函数,它接收web请求并且会返回web响应.响应可以是一张网页的html,一个重定向,或者是一张图片...任何东西都可以.无论是什 ...

  5. Django框架(五)-- 视图层:HttpRequest、HTTPResponse、JsonResponse、CBV和FBV、文件上传

    一.视图函数 一个视图函数,简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应.响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. ...

  6. Django框架(六)—— 视图层:HttpRequest、HTTPResponse、JsonResponse、CBV和FBV、文件上传

    目录 视图层 一.视图函数 二.视图层之HttpRequest对象 三.视图层之HttpResponse对象 四.视图层之JsonResponse对象 五.CBV和FBV 六.文件上传 视图层 一.视 ...

  7. Dajngo——10 请求与响应 文件上传 GET和POST请求 类视图

    Dajngo——10 HttpRequest对象 HttpResponse对象及子类 form标签中的GET和POST GET提交方式 POST提交方式 request得GET和POST属性 文件上传 ...

  8. Day21 Django之Form文件上传、原生Ajax和实现抽屉实例

    一.Form文件上传 """ Django settings for prev_chouti project. Generated by 'django-admin st ...

  9. python 全栈开发,Day75(Django与Ajax,文件上传,ajax发送json数据,基于Ajax的文件上传,SweetAlert插件)

    昨日内容回顾 基于对象的跨表查询 正向查询:关联属性在A表中,所以A对象找关联B表数据,正向查询 反向查询:关联属性在A表中,所以B对象找A对象,反向查询 一对多: 按字段:xx book ----- ...

随机推荐

  1. js正则基础总结和工作中常用验证规则

    知识是需要系统的.就像js正则用了那么多次,却还是浑浑噩噩,迫切需要来一次整理,那么来吧! 基本知识 元字符 \d 匹配数字等于[0-9] \w 匹配字母.数字.下划线.中文 \s 匹配任意空白字符 ...

  2. 安卓SQLite数据库操作(上)

    安卓系统自带数据库,名为SQLite.这篇文章我们用一个Demo来讲解安卓操作数据库的例子. By the way, 安卓创建的数据库文件存放在/data/data/<包名>/databa ...

  3. javaScript之动态样式

        动态添加样式可以实现更好的视觉效果和交互效果,下面就介绍一下如何动态和删除样式: 方法一.使用obj.className来修改样式表的类名 obj.className = “style1”; ...

  4. mysql show status 参数解析

    状态名 作用域 详细解释 Aborted_clients Global 由于客户端没有正确关闭连接导致客户端终止而中断的连接数 Aborted_connects Global 试图连接到MySQL服务 ...

  5. Springboot中AOP统一处理请求日志

    完善上面的代码: 现在把输出信息由先前的system.out.println()方式改为由日志输出(日志输出的信息更全面) 现在在日志中输出http请求的内容 在日志中获取方法返回的内容

  6. 4-3 set与delete命令的使用_(有一处打点 内容不确定)

    那么既然有create创建操作,那么也就有改操作,也就是我们平时所说的增删改.它使用的是set命令去修改它的节点. set path data [version] verision是可以写也可以不写. ...

  7. vue安装vuex框架

    1.安装vuex npm install vuex --save-dev 2.创建storesrc下创建stores文件夹,创建noteStore.js import Vue from 'vue'; ...

  8. ???SpringMVC_03 利用SpringMVC提供的过滤器解决浏览器请求参数的乱码问题

    1 响应乱码问题 在启用mvc注解的配置中添加一个转换器配置 <?xml version="1.0" encoding="UTF-8"?> < ...

  9. WarTransportation TopCoder - 8404

    传送门 分析 我们高兴的发现数据范围特别小,所以我们可以随便搞.因为一共只砍掉一条路,所以我们先算出对于任意一个点如果将它的出边割掉一条则它到达终点的最坏情况的最短距离是多少,然后我们从终点向起点反着 ...

  10. (转)HTML&CSS——background: url() no-repeat 0 -64px;CSS中背景图片定位方法

    http://blog.csdn.net/oscar92420aaa/article/details/51304067 CSS中背景图片的定位,困扰我很久了.今天总算搞懂了,一定要记下来. 在CSS中 ...