Django框架之视图函数views
文章目录
- 一、视图函数
- 二、Request请求
- 1、前端参数解析
- 2、请求体参数
- 3、请求头参数
- 4、Cookies & Session
- 5、其他常用方法
- 三、Response返回
- 1、HttpResponse
- 2、JsonResponse
- 3、开发模式
- 4、重定向
- 5、反向定位
- 6、错误视图
一、视图函数
在views.py中定义的函数,称为视图函数
- 视图函数的第一参数是HttpRequest对象
- HttpRequest对象包含了请求的所有数据(请求头、请求体)
- 视图函数必须得返回一个HttpResponse对象或者其子类对象
- 类视图分为普通视图和类视图;
- 普通视图是直接定义函数,传参request;
- 类视图,定义类,继承View或View子类,每一个处理请求的方法,第二个参数必须为HttpRequest对象,必须得返回HttpResponse对象或者HttpResponse子类对象
不同的请求方法有相应的方法进行对应
GET -> get
POST -> post
PUT -> put
DELETE -> delete
PATCH -> patch
import json
from django.http import HttpResponse, JsonResponse
from django.shortcuts import render
from django.views import View# 普通视图
def projects(request):if request.method == 'GET':return HttpResponse("<h1>获取项目信息</h1>")elif request.method == 'POST':return HttpResponse("<h1>创建项目信息</h1>")elif request.method == 'PUT':return HttpResponse("<h1>更新项目信息</h1>")elif request.method == 'DELETE':return HttpResponse("<h1>删除项目信息</h1>")else:return HttpResponse("<h1>其他操作</h1>")# 类视图
class ProjectsView(View):"""一、定义类视图1.继承View或者View子类2.不同的请求方法有相应的方法进行对应GET -> getPOST -> postPUT -> putDELETE -> deletePATCH -> patch3.每一个处理请求的方法,必须得返回HttpResponse对象或者HttpResponse子类对象4.每一个处理请求的方法,第二个参数必须为HttpRequest对象"""def get(self, request, pk):return HttpResponse(f"<h1>更新项目{pk}信息</h1>")
二、Request请求
获取请求方式:request.method
获取请求路径:request.path
1、前端参数解析
前端传递参数的方式
1)路径参数
a.在url路径中传递的参数
b.在请求实例方法中,使用关键字参数来接收
urls.py中
path('projects/<int:pk>/', views.ProjectsView.as_view()),
#------分割线--------------------
views.py中
def post(self, request, pk):pass
urls.py中定义的pk,在实际请求中作为参数传入。
2)查询字符串参数
a.url ?后面的key value键值对参数,如:http://www.xxx.com/?key1=value1&key2=value2
b.request.GET获取
c.request.GET返回QueryDict,类似于python中dict类型
d.可以使用[‘key1’]、get(‘key1’),会返回具体的值,如果有多个相同key的键值对,获取的是最后一个
e.getlist(‘key1’),获取相同key的多个值,返回list类型
# 获取单一值
request.GET.get('username')
# 获取多个值,返回一个列表
request.GET.getlist('age')
2、请求体参数
验证这个post方式时需要注释掉一个中间件’django.middleware.csrf.CsrfViewMiddleware’,这个是为了防止跨域攻击。
1)json格式
- json格式的参数会存放在body中,一般为字节类型
- json.loads(request.body),返回Python中的数据类型(字典、嵌套字典的列表)
json.loads(request.body)
2)www-form-urlencoded表单
- 一般在前端页面中使用表单录入的参数
- request.POST返回QueryDict,类似于python中dict类型
#获取单一值
request.POST.get('username')
#获取多个值,返回一个列表
request.POST.getlist('age')
3)file(multipart/data)
- 传递的文本参数可以使用request.POST去提取
- 传递的非文本参数(二进制文件)可以使用request.FILES去提取
- 如果传递纯粹的文件,request.body去提取
3、请求头参数
- 第一种方式:request.headers[‘key1’]或者.get(‘key1’)
- 第二种方式:request.META[‘HTTP_AUTHORIZATION’]
- 1)请求头参数的可以被转化为:HTTP_参数名大写
- 如果参数名中含有-,会自动转换为_
- request.META 得到的META是一个字典,META中常用的键
- HTTP_REDERER 来源页面
- REMOTE_ADDR 客户端IP
- REMOTE_HOST 客户端主机
4、Cookies & Session
COOKIES ⼀个标准的Python字典,包含所有的cookie,键和值都为字符串
SESSION ⼀个类似于字典的对象,表示当前的会话,只有当Django启⽤会话的⽀持时才可⽤
def get_cookie(res):n1 = res.COOKIES['username']n2 = res.COOKIES['username2']return HttpResponse(n1 + ' ' + n2)
def get_session(res):n1 = res.session['username']n2 = res.session['username2']return HttpResponse(n1 + ' ' + n2)
5、其他常用方法
# 获取请求路径+查询字符串
request.get_full_path()
# 获取主机名+端口
request.get_host()
# 完整的URL
request.build_absolute_uri()
# 获取请求参数的字典
request.GET.dict()
三、Response返回
每一个处理请求的方法,必须得返回HttpResponse对象或者HttpResponse子类对象
1、HttpResponse
- 第一个参数为字符串类型(需要返回到前端的字符串数据)
- content_type可以指定响应头中的Content-Type参数
- status可以指定响应状态码
import json
from django.http import HttpResponse
from django.views import Viewclass TestView(View):def get(self, request, pk):project_data = {'id': 1,'name': 'xxxx项目','leader': '小达'}json_str = json.dumps(project_data, ensure_ascii=False)return HttpResponse(json_str, content_type='application/json', status=201)
2、JsonResponse
- 为HttpResponse子类
- 用于返回json数据
- 第一个参数可以直接传递字典或者嵌套字典的列表
- 默认添加content_type为application/json
- 默认第一个参数只能为字典,如果为嵌套字典的列表,需要设置safe=False
- 输出真正的中文需要指定ensure_ascii=False;
import json
from django.http import HttpResponse
from django.views import Viewclass TestView(View):def get(self, request, pk):project_data = {'id': 1,'name': 'xxxx项目','leader': '小达'}project_data_list = [{'id': 1,'name': 'xxxx项目','leader': '小达'}]json_str = json.dumps(project_data, ensure_ascii=False)return JsonResponse(project_data, json_dumps_params={'ensure_ascii': False}, status=201)# 输出嵌套字典的列表时需要设置safe=False# return JsonResponse(project_data_list, json_dumps_params={'ensure_ascii': False}, status=201, safe=False)
3、开发模式
- 前后端不分离的开发模式
- 后端如果返回的是一个完整的html页面(页面中有填充数据)
- 前后端分离的开发模式
- 后端如果返回的是数据(json、xml)
4、重定向
- HttpResponseRedirect重定向到指定路由
- redirect是HttpResponseRedirect的快捷方式
return redirect('/user')
5、反向定位
由应用命名空间:name来确定路由,这个需要配合命名空间App使用,命名空间定义在urls.py中:app_name = “App”
如果我们不去命名命名空间的话会报一个错误
django.urls.exceptions.NoReverseMatch: 'app' is not a registered namespace
# 不带参数
return HttpResponseRedirect(reverse("APP:show"))
# 带参数
return HttpResponseRedirect(reverse("APP:show"),args=(1,2))
# 带参数,且参数有名字
return HttpResponseRedirect(reverse("APP:show"),kwargs={'name':'LYJ','pw':'123'}
6、错误视图
500以上的错误都是服务器内部的问题
403 权限拒绝
404 找不到指定文件
我们可以自定义404界面,将DEBUGE模式关闭,直接在templates中建文件404.html,当找不到资源时便会调用这个文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>404</title>
</head>
<body>
<h2>服务器睡着了,找不到您的页面</h2>
</body>
</html>
Django框架之视图函数views相关推荐
- Django - - - -视图层之视图函数(views)
阅读目录(Content) 视图层之视图函数(views) 一个简单的视图 1.HttpRequest 2.HttpResponse 1.render 函数 2.redirect 函数 对比rende ...
- Python框架篇之Django(路由系统URL、视图函数views)
文章目录 一.路由系统(URL) 二.视图函数(views) 一.路由系统(URL) 1.URL配置 (URLconf)就像Django 所支撑网站的目录.它的本质是URL模式以及要为该URL模式调用 ...
- django redirect传递参数_Django 视图层(四):视图函数 - views.py
介绍 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图 ...
- 深入Django(1): 通用视图 (generic views)
如果对Django的基础部分尚不熟悉,请参考<Django实战>系列. 内容提要 1. 回顾Django的视图函数(view function) 2. 在视图函数中使用模板 3. 简化视图 ...
- Django框架——类视图
目录 1.类视图的使用 2.类视图装饰器的使用 1.类视图的使用 继承View类,通过不同的请求方式定义不同的函数. 类视图的好处: (1)代码可读性好 (2)类视图相对于函数视图有更高的复用性 , ...
- Django的视图函数(二):request对象、视图函数返回值(HTML响应、JsonResponse)、反向解析(视图函数)、HttpResponse子类
文章目录 一.request对象 1.概念 2.属性 (1)path (2)method (3)GET (4)POST (5)encoding (6)META 二.视图函数的返回值 1.HTML响应 ...
- python视图函数是什么_python之视图函数(views.py)
视图函数(views.py)简称视图,它接受web请求并且返回web响应.其中每个视图都要返回一个HttpResponse对象. http请求中会产生两个核心对象: http请求:HttpReques ...
- django目录下的路由系统和视图函数
一.Django路由系统(url) 1.什么是路由系统 路由系统的本质是URL模式以及要为该URL模式调用的视图函数之间的一个映射表即不同的url路径对应的不同的函数,该路由系统是存放在全局配置文件u ...
- Django框架之初识
前言 1. 什么是Web应用程序? 通过Web访问的应用程序,用户只需要有浏览器即可,不需要再安装其他软件 应用程序有两种模式: C/S:C/S是客户端/服务器端程序,也就是说这类程序一般独立运行 B ...
最新文章
- .Toolkit 增补
- 【解析】Alice and Bob_24行代码AC
- JQuery radio(单选按钮)操作方法汇总
- centos7 如何安装部署k8s_架构运维篇(五):Centos7/Linux中安装部署RocketMQ
- 使用bottle进行web开发(9):文件上传;json传递
- Atitit.html解析器的选型 jsoup nsoup ,java c# .net 版本
- 计算机软件处理化学数据,化学中的常用计算机软件与资源程功臻武汉大学化学系计算机作为一.pdf...
- 360网站查杀php专版,360网站木马查杀插件上线:可检测Struts2漏洞
- 纯CSS手里剑绘制优化1
- 风控策略中如何制定差异化利率定价方案
- 如果可以随意 Emoji 组合,你能让两个表情包碰撞出什么花样?
- 面试官最爱提的问题TOP10来自:北京人才市场报
- 2020中国高校计算机大赛网络技术挑战赛,风起云涌!2020 “中国高校计算机大赛-网络技术挑战赛”总决赛即将在浙南科技城开赛...
- python gui学生管理系统(Python gui+MySQL数据库)
- 条形码(barcode)code128生成代码
- 用python计算数学集合A-B
- 山东村民水井捞出女性头颅 死者系遭人肢解抛尸
- 绝对干货!风控实战数据解析,1分钟教你看懂运营商大数据!
- 3D 人体姿态估计简述[转]
- VS2017 提示 无法找到 v140 的生成工具(平台工具集 =“v140”)
热门文章
- 【PAT】A1114 Family Property (25 point(s))
- MetersPhere参数赋值时间戳+对接口参数进行加密---form-data格式请求
- w10服务器优化,Win10专业版怎么优化最流畅?Win10最详细优化设置告别卡顿!
- linux系统没ip,树莓派在没有显示器情况下查找未知IP教程
- TCP/IP网络初识
- 爬虫工程师必备技术栈——加密解密以及字符编码原理
- C++知三角形三边求面积
- 微信小程序——获取用户的运动步数
- Lingo练习 选拔问题
- 如何将excel表格导入word_如何将Excel中的数据写入Word表?