python的Web框架,Django框架中的请求与响应

简介: python的Web框架,Django框架中的请求与响应 请求与响应 简单流程图 我们先来了解一个请求与响应的大概流程  视图函数接受到的request到底是个什么对象呢? 服务器接收到http协议的请求后,会根据报文创建HttpRequest对象视图函数的第一个参数是HttpRequest对象在django.http模块中定义了HttpRequest对象的API,下面我们来列出这个对象的方法。

python的Web框架,Django框架中的请求与响应

请求与响应

简单流程图

我们先来了解一个请求与响应的大概流程 image

视图函数接受到的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

相关文章
|
7月前
|
数据采集 存储 开发者
如何动态调整Python爬虫的Request请求延迟
如何动态调整Python爬虫的Request请求延迟
269 13
|
2月前
|
数据采集 Web App开发 前端开发
处理动态Token:Python爬虫应对AJAX授权请求的策略
处理动态Token:Python爬虫应对AJAX授权请求的策略
|
8月前
|
XML JSON API
淘宝商品详情API的调用流程(python请求示例以及json数据示例返回参考)
JSON数据示例:需要提供一个结构化的示例,展示商品详情可能包含的字段,如商品标题、价格、库存、描述、图片链接、卖家信息等。考虑到稳定性,示例应基于淘宝开放平台的标准响应格式。
|
3月前
|
JSON JavaScript API
Python模拟HTTP请求实现APP自动签到
Python模拟HTTP请求实现APP自动签到
|
5月前
|
Linux 数据库 数据安全/隐私保护
Python web Django快速入门手册全栈版,共2590字,短小精悍
本教程涵盖Django从安装到数据库模型创建的全流程。第一章介绍Windows、Linux及macOS下虚拟环境搭建与Django安装验证;第二章讲解项目创建、迁移与运行;第三章演示应用APP创建及项目汉化;第四章说明超级用户创建与后台登录;第五章深入数据库模型设计,包括类与表的对应关系及模型创建步骤。内容精炼实用,适合快速入门Django全栈开发。
197 1
|
5月前
|
XML JSON 安全
分析参数顺序对Python requests库进行POST请求的影响。
最后,尽管理论上参数顺序对POST请求没影响,但编写代码时仍然建议遵循一定的顺序和规范,比如URL总是放在第一位,随后是data或json,最后是headers,这样可以提高代码的可读性和维护性。在处理复杂的请求时,一致的参数顺序有助于调试和团队协作。
172 9
|
7月前
|
数据采集 人工智能 测试技术
Python有哪些好用且实用的Web框架?
Python 是一门功能强大的编程语言,在多个领域中得到广泛应用,包括爬虫、人工智能、游戏开发、自动化测试和 Web 开发。在 Web 开发中,Python 提供了多种框架以提高效率。以下是几个常用的 Python Web 框架:1) Django:开源框架,支持多种数据库引擎,适合新手;2) Flask:轻量级框架,基于简单核心并通过扩展增加功能;3) Web2py:免费开源框架,支持快速开发;4) Tornado:同时作为 Web 服务器和框架,适合高并发场景;5) CherryPy:简单易用的框架,连接 Web 服务器与 Python 代码。这些框架各有特色,可根据需求选择合适的工具。
354 14
|
7月前
|
数据采集 Web App开发 文字识别
Python爬虫多次请求后被要求验证码的应对策略
Python爬虫多次请求后被要求验证码的应对策略
|
8月前
|
JSON API 数据格式
Python 请求微店商品详情数据 API 接口
微店开放平台允许开发者通过API获取商品详情数据。使用Python请求微店商品详情API的主要步骤包括:1. 注册并申请API权限,获得app_key和app_secret;2. 确定API接口地址与请求参数,如商品ID;3. 生成签名确保请求安全合法;4. 使用requests库发送HTTP请求获取数据;5. 处理返回的JSON格式响应数据。开发时需严格遵循微店API文档要求。
|
8月前
|
机器学习/深度学习 开发框架 API
Python 高级编程与实战:深入理解 Web 开发与 API 设计
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化、调试技巧以及数据科学和机器学习。本文将深入探讨 Python 在 Web 开发和 API 设计中的应用,并通过实战项目帮助你掌握这些技术。

推荐镜像

更多