请求与响应

简单流程图

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

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

  <form action="提交地址,为空为当前页" method="默认为POST请求">

         # 如果是post请求,会有安全的问题,需要加上csrf的方法,才可以使用post请求。
{% csrf_token %} <p>用户名:<input type="text" name="必须要给的属性,用于后台获取参数得到的key"></p>
<p>密码:<input type="password" name="必须要给的属性,用于后台获取参数得到的key"></p>
<p>用户名:<input type="submit" value="登录"></p>
</form>

views中的简单逻辑判断写法:

因为登录页面有GET请求,也有POST的请求,所以需要再视图的时候需要进行判断,做出反应。

 def login(request):

     if request.method =='POST'

         # userame和password 这个key是前端网页传过来的类似的字典方式。
username = request.POST.get('username','')
password = request.POST.get('password','') # 如果账号和密码是对的,则跳转到首页
if username == 'aaa' and password == '':
return redirect(reverse('teacher:index'))
else:
此处添加账户密码错误的返回结果 # 如果是GET方法则把login页面返回过去
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中设置,同时需要新建文件夹。

 #测试用的,名字可以随意取,暂时路径为根目录下的文件夹。
UPLOAD_ROOT = os.path.join(BASE_DIR,'upload')

html中form的基础写法

 <form action="" method="post" enctype="multipart/form-data">
{% scrf_token %}
<p>请选择你要上传的文件:<input type="file" name="file" multiple></p>
<p><input type="submit" value="上传"></p>
</form> enctype="multipart/form-data":只有form表带拥有这个属性的时候,才有上传文件的功能
multiple:选择文件需要带有才可以上传多个文件

配置view: 判断file,如果有文件,则创建文件夹(文件夹名为当天日期)

 from datetime import datetime
from crm.setting import UPLOAD_ROOT
import os def upload(request):
if request.method == 'POST':
files = request.FILES.getlist('file', None)
#如果有多个文件,则循环取出,
for file in files:
#文件名
day_dir = datetime.noe.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:
#chunks是一个以文件流的形式取值。如果文件较大,以read的方式取值则会耗费资源。
for line in file.chunks():
f.write(line)
return HttpResponse('上传成功') 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数据,这里先演示一个查询数据的接口
 def students_api(request):
sex = request.GET.get('sex','')
sex = int(sex)
res = Students.objects.values('name','age','sex','phone').filter(sex=sex)
res = dect('data':res)
return JsonResponse(res)

 

python的Web框架,Django框架中的请求与响应的更多相关文章

  1. Windows上python开发--2安装django框架

    Windows上python开发--2安装django框架 分类: 服务器后台开发2014-05-17 21:22 2310人阅读 评论(2) 收藏 举报 python django 上一篇文章中讲了 ...

  2. WEB框架-Django框架学习-预备知识

    今日份整理,终于开始整个阶段学习的后期了,今日开始学习Django的框架,加油,你是最胖的! 1.web基础知识 1.1 web应用 Web应用程序是一种可以通过Web访问的应用程序,程序的最大好处是 ...

  3. web 框架的本质及自定义web框架 模板渲染jinja2 mvc 和 mtv框架 Django框架的下载安装 基于Django实现的一个简单示例

    Django基础一之web框架的本质 本节目录 一 web框架的本质及自定义web框架 二 模板渲染JinJa2 三 MVC和MTV框架 四 Django的下载安装 五 基于Django实现的一个简单 ...

  4. Python学习笔记_04:Django框架简介

    目录 1 什么是Django? 2 Django框架的开发环境搭建 3 Django操作MySql数据库简介 4 功能强大的Django管理工具应用 1 什么是Django? Django是应用于We ...

  5. python 之 Django框架(Django框架简介、视图装饰器、request对象、Response对象)

    12.33 Django框架简介: MVC,全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器( ...

  6. Python、PyCharm、Django框架安装

    一.下载Python环境 1.1 下载Python环境,以下网址: https://www.python.org/downloads/release/python-373/ 下载安装包: 1.2点击安 ...

  7. WEB框架-Django框架学习(一)-基础层级关系

    今日主要内容为Django架构,主要有路由层,视图层和模板层 1. Django的路由层 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之 ...

  8. Python之Flask和Django框架解决跨域问题,配合附加ajax和fetch等js代码

    Flask框架py解决跨域问题示例: # -*- coding: utf- -*- # by zhenghai.zhang from flask import Flask, render_templa ...

  9. 框架----Django框架(基础篇)

    一.基本配置 一.创建django程序 终端命令:django-admin startproject sitename IDE创建Django程序时,本质上都是自动执行上述命令 其他常用命令: pyt ...

随机推荐

  1. Apache beam中的便携式有状态大数据处理

    Apache beam中的便携式有状态大数据处理 目标: 什么是 apache beam? 状态 计时器 例子&小demo 一.什么是 apache beam? 上面两个图片一个是正面切图,一 ...

  2. 在Linux服务器上配置Transmission来离线下载BT种子

    Transmission简介 Transmission是一种BitTorrent客户端,特点是跨平台的后端和简洁的用户界面,硬件资源消耗极少,支持包括Linux.BSD.Solaris.Mac OS ...

  3. zigbee3.0的协议特性

    ZigBee协议有如下特性: 支持多种网络拓扑,比如点对点,点对多点,自组网: 低工作占空比能力,提供长电池供电的可能: 低延迟: 采用DSSS扩频技术: 每个网络最高可支持65,000节点 128- ...

  4. HQL数据查询基础

    HQL定义 1.Hibernate Query Language, Hibernate查询语言 2.HQL是面向对象的查询语言(HQL查询的主体是映射配置的持久化类及其属性而SQL查询主体是数据库表) ...

  5. 解决刚刚安装完mysql 远程连接不上问题

    解决远程连接mysql错误1130 远程连接Mysql服务器的数据库,错误代码是1130,ERROR 1130: Host xxx.xxx.xxx.xxx  is not allowed to con ...

  6. Dockerfile 构建容器

    本文是最简单的Dockerfile教程,创建tomcat容器,并跑自己的java程序 首先需要准备几个东西 1.你的java web(test.war) 程序,最好打包成一个 war:(主要是没测试 ...

  7. Ngui使用随心记

    Ngui的一些基础使用心得! BB:首先BB一下我觉得NGUI和UGUI哪个好?我首推UGUI,先不说是官方内置,在使用的方便性上也要好很多,而且NGUI停止更新了!还有就是NGUI有BUG! Ngu ...

  8. SQL Server 最大并行度

    一.概念 1.关联掩码(affinitymask) 为了执行多任务,MicrosoftWindows2000和WindowsServer2003有时会在不同的处理器之间移动进程线程.虽然从操作系统方面 ...

  9. 【设计经验】1、Verilog中如何规范的处理inout信号

    在FPGA的设计过程中,有时候会遇到双向信号(既能作为输出,也能作为输入的信号叫双向信号).比如,IIC总线中的SDA信号就是一个双向信号,QSPI Flash的四线操作的时候四根信号线均为双向信号. ...

  10. 还原是不可能还原的,这辈子都不可能还原(手动笑cry)

    不好意思,我又把原厂避震换回border的绞牙了. 这套台湾绞牙已经陪伴了我第三个年头了,本次主要是调节了桶身高度,让车身升高了一下,现在是前面3指松将近4指.后面2指(以前是前面2指半.后面1指松2 ...