python的Web框架,Django框架中的请求与响应
请求与响应
简单流程图
我们先来了解一个请求与响应的大概流程
视图函数接受到的request到底是个什么对象呢?
服务器接收到http协议的请求后,会根据报文创建HttpRequest对象视图函数的第一个参数是HttpRequest对象在django.http模块中定义了HttpRequest对象的API,下面我们来列出这个对象的方法。
request属性 | 说明 |
---|---|
path | 一个字符串,表示请求页面的完整路径,不包括域名 |
method | 一个字符串,表示请求使用的HTTP方法,常用值包括:'GET'、'POST' |
*encoding | 一个字符串,表示提交的数据的编码方式, |
GTE | 一个类似于字典的对象,包含get请求方式的所有参数 |
POST | 一个类似于字典的对象,包含post请求方式的所有参数 |
FILES | 一个类似于字典的对象,包含所有的上传文件 |
COOKIES | 一个标准的python字典,包含所有的cookie,键和值都为字符串 |
sessin | 一个即可读有可写的类似字典的对象,表示当前的会话,只有当Django启动会话的支持时才可用,详细内容见"状态保存" |
方法:is_ajax() | 如果请求是通过XMLHttpRequest发起的,则返回True |
*encoding:如果为None则表示使用浏览器的默认设置,一般为utf-8,这个属性是可写的,可以通过修改它来修改访问表单数据使用的编码,接下来对属性的任何访问将使用新的encoding值
POST登录提交的html例子
html中的form表单解析
1 <form action="提交地址,为空为当前页" method="默认为POST请求"> 2 3 # 如果是post请求,会有安全的问题,需要加上csrf的方法,才可以使用post请求。 4 {% csrf_token %} 5 6 <p>用户名:<input type="text" name="必须要给的属性,用于后台获取参数得到的key"></p> 7 <p>密码:<input type="password" name="必须要给的属性,用于后台获取参数得到的key"></p> 8 <p>用户名:<input type="submit" value="登录"></p> 9 </form>
views中的简单逻辑判断写法:
因为登录页面有GET请求,也有POST的请求,所以需要再视图的时候需要进行判断,做出反应。
1 def login(request): 2 3 if request.method =='POST' 4 5 # userame和password 这个key是前端网页传过来的类似的字典方式。 6 username = request.POST.get('username','') 7 password = request.POST.get('password','') 8 9 # 如果账号和密码是对的,则跳转到首页 10 if username == 'aaa' and password == '123456': 11 return redirect(reverse('teacher:index')) 12 else: 13 此处添加账户密码错误的返回结果 14 15 # 如果是GET方法则把login页面返回过去 16 return render(request, 'teacher/login.html')
get以及post方式访问如何的获取多个参数
当网页是get访问的时候,且是多个参数的时候,取值是什么样的呢。
访问的网页url例子:
http://127.0.0.1:8000/teacher/login/?hobby=篮球&hobby=足球&hobby=羽毛球
正常的取值方法,只能获取到一个值
#一键多值的情况下,只能拿到一个值 >>> request.GET.get('hobby') '羽毛球'
getlist:拿多个值的时候,需要getlist
>>> request.GET.getlist('hobby') ['篮球','足球','羽毛球']
POST方法相同,只需要修改'GET'为'POST'即可。
文件上传
需要设置上传文件存放的路径,setting中设置,同时需要新建文件夹。
1 #测试用的,名字可以随意取,暂时路径为根目录下的文件夹。 2 UPLOAD_ROOT = os.path.join(BASE_DIR,'upload')
html中form的基础写法
1 <form action="" method="post" enctype="multipart/form-data"> 2 {% scrf_token %} 3 <p>请选择你要上传的文件:<input type="file" name="file" multiple></p> 4 <p><input type="submit" value="上传"></p> 5 </form> 6 7 enctype="multipart/form-data":只有form表带拥有这个属性的时候,才有上传文件的功能 8 multiple:选择文件需要带有才可以上传多个文件
配置view: 判断file,如果有文件,则创建文件夹(文件夹名为当天日期)
1 from datetime import datetime 2 from crm.setting import UPLOAD_ROOT 3 import os 4 5 def upload(request): 6 if request.method == 'POST': 7 files = request.FILES.getlist('file', None) 8 #如果有多个文件,则循环取出, 9 for file in files: 10 #文件名 11 day_dir = datetime.noe.strftime('%Y%m%d') 12 #绝对路径拼接 13 pre_dir = os.path.join(UPLOAD_ROOT,day_dir) 14 15 #判断文件夹是否存在,需要注意当前用户是否有权限 16 if not os.path.exists(pre_dir): 17 os.mkdir(pre_dir) #如果不存在则创建文件夹 18 19 # 拿到用户上传过来的文件名,和路径拼接 20 filename = os.path.join(pre_dir, file.name) 21 22 # 写数据(二进制) 23 with open(filename, 'wb') as f: 24 #chunks是一个以文件流的形式取值。如果文件较大,以read的方式取值则会耗费资源。 25 for line in file.chunks(): 26 f.write(line) 27 return HttpResponse('上传成功') 28 29 return render(request, 'teacher/upload.html')
HTTPResponse对象:
from django.http import HttpResponse
属性 | 作用 |
---|---|
content | 表示返回的内容,字节类型 |
charset | 表示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对象,会话将在这个指定的日期/时间过期。 |
max_age与expires二选一 | max_age与expires二选一,如果不指定过期时间,则关闭浏览器就失效 |
deleta_cookie(key) | 删除指定的key的cookie,如果key不存在则数秒也不发送 |
*expires:注意datetime和timedelta值只有在使用PickleSerializer时才可序列化。
JsonResponse 返回json数据,只能接受字典类型
如何返回一个json数据,这里先演示一个查询数据的接口
1 def students_api(request): 2 sex = request.GET.get('sex','') 3 sex = int(sex) 4 res = Students.objects.values('name','age','sex','phone').filter(sex=sex) 5 res = dect('data':res) 6 return JsonResponse(res)
转载于:https://www.cnblogs.com/hua888/p/10469663.html
python的Web框架,Django框架中的请求与响应相关推荐
- python原始web与django框架 mvc模式开发
使用Python开发Web,最简单,原始和直接的办法是使用CGI标准. 首先做一个Python脚本 输出HTML代码 然后保存成.cgi扩展名的文件 通过浏览器访问此文件 如下: #!/usr/bin ...
- Python Web开发——Django框架学习
文章目录 Web开发简介 Web应用技术 Web前端开发 Web后端开发 使用 Django 开发后端服务 项目目标 管理员操作 登录界面 客户管理界面 添加客户界面 药品管理界面 添加药品界面 订单 ...
- 师傅带徒弟学:Python Web之Django框架-关东升-专题视频课程
师傅带徒弟学:Python Web之Django框架-475人已学习 课程介绍 Python Web是Python语言一个重要的应用方面,Python Web有很多,其中Flask和D ...
- Windows上python开发--2安装django框架
Windows上python开发--2安装django框架 分类: 服务器后台开发2014-05-17 21:22 2310人阅读 评论(2) 收藏 举报 python django 上一篇文章中讲了 ...
- Python学习笔记--10.Django框架快速入门之后台管理admin(书籍管理系统)
Python学习笔记--10.Django框架快速入门之后台管理 一.Django框架介绍 二.创建第一个Django项目 三.应用的创建和使用 四.项目的数据库模型 ORM对象关系映射 sqlite ...
- 基于python摄影作品展示网站django框架计算机毕业设计源码+系统+数据库+lw文档+调试部署
基于python摄影作品展示网站django框架计算机毕业设计源码+系统+数据库+lw文档+调试部署 基于python摄影作品展示网站django框架计算机毕业设计源码+系统+数据库+lw文档+调试部 ...
- python基础教程:Django框架的中的setting.py文件说明详解
这篇文章主要介绍了Django框架的中的setting.py文件说明详解,这个文件包含了所有有关这个Django项目的配置信息,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 1.加载数据库,数据库 ...
- Python技术学习之Django框架设计思想
Python是目前比较流行的计算机编程语言,据用丰富和强大的库,被称为胶水语言,能够把用其他语言制作的各种模块很轻松地联结在一起. Python功能强大,用途广泛,可广泛应用于云计算.web开发.科学 ...
- python的django介绍_【Python基础知识】Django框架简介
很多初学Python的小伙伴不知道该从何开始学起,其实零基础学习的话可以先学习一些Python基础知识,等基础打牢之后再去接触更加深入的技术,接下来小编就为大家简单介绍一下有关于 Django框架内容 ...
最新文章
- 几个阿里, 美团,腾讯大佬的公众号!超级变态!
- 5M1E,软件质量管理最佳解决方案
- 击鼓传花c语言编程题,c语言-第5章 循环程序设计.ppt
- 校外访问不了cgbt.cn(403 forbidden)解决办法
- 安卓案例:基于HttpURLConnection下载文本与图片
- c向python注册函数_python如何调用C, 如何注册成C的回调函数(python后台程序常用方法)...
- 热门开源CI/CD解决方案 GoCD 中曝极严重漏洞,可被用于接管服务器并执行任意代码...
- 模仿笔迹最好的软件_模仿签名代写签字行业进入战国时代,乱战模式开启!
- C/C++中static与const的区别与联系
- “模板”学习笔记(3)-----为啥函数模板不能重载
- Oracle官方PLSQL学习网址
- 【AD笔记】--封装库PCB
- 网易2020校招数据分析方向正式批笔试题 解析
- java mis系统_关于使用Java开发Mis系统
- 三极管与稳压管恒流电路
- [Erlang 0075] Bad value on output port 'tcp_inet'
- 《Visual Basic.Net 循序渐进》
- android 支付宝 40247,iOS——集成支付宝 系统繁忙,请稍后再试ALI40247
- php数据迁移脚本,Laravel中数据迁移与数据填充的详细步骤
- 幂乘法求最大特征值和特征向量
热门文章
- MyBatis mapper文件中使用常量
- 问题:Unable to find a 'userdata.img' file for ABI armeabi to copy into the AVD folder.
- 图的数组(邻接矩阵)存储结构
- File Explore 中data权限修改,实体机
- 在Windows Server 2008上部署SVN代码管理总结
- poj 1306 Combinations
- ndarray.shape[]返回值的意义
- python to_excel_Pandas DataFrame.to_excel()用法详解
- android网页打开摄像头,在android上,用WEB页面打开手机摄像头
- 01H5-fe-html5-005插入音频