视图层详解,cbv和fbv,文件上传

article/2025/8/27 2:52:27

day64

  • 一.复习
  • 二.视图层之请求对象
  • 三.视图层之响应对象
    • 补充知识之json序列化与反序列化
  • 四.cbv和fbv
  • 五.文件上传
  • 六.postman软件
  • 七.form表单,提交地址
  • 八.Pycharm的自动提示

一.复习

1 web应用-通过浏览器访问的服务-cs/bs-基于socket
2 Http协议-http协议版本,0.9 1.1 2.x 3.x 有什么异同-请求头和响应头中的key-value-请求协议-请求首行:请求方式,地址,协议和版本-请求头-请求体-响应协议-响应首行:协议版本,状态码和状态-响应头-响应体:html,css,js-特点:-基于socket-基于请求响应-无状态无连接-url:统一资源定位符
3 web框架-wsgiref(socket的封装)自己写了一个web框架-django,flask:同步框架,tornado,sanic,fastapi:异步框架-其他socket服务端(遵循WSGI协议)-wsgiref,uwsgi(c语言写的),tornado,gunicorn(python写的)-uwsgi+django-gunicorn+flask
4 django-安装(虚拟环境),创建项目,创建app-配路由,写视图函数,models-静态文件配置-路由配置-url函数,re_path函数,path函数,四个参数-有名,无名分组-路径后是否加/-路由分发 include-反向解析(通过别名拿到路径)-名称空间-2.x的转换器(5 str int)-自定义转换器
5 视图层-request对象-请求方法-get请求参数,地址栏中的参数-post请求参数,请求体中的参数(name=lqz&password=123),有的格式取不出来-http://127.0.0.1:8000/login/?name=lqz 向这个地址发送请求-response对象-三件套-render-HttpResponse-redirect
6 模型层models.py-可以创建表,可以删除表,可以新增字段,删除字段(不能创建数据库)-默认使用sqlite(如果使用mysql)-写类,写字段-数据库迁移,两条命令
7 模板层-{{变量}}
8 请求生命周期,MTV和MVCweb微信如何做的?(服务端主动向客户端推送消息)-轮询:不停地向服务端发送请求-长轮询:向服务端发送一个请求等待20,再发送-websocket:主动推送消息,应用层协议

二.视图层之请求对象

def index(request):'''
request:django封装的对象,它的类是WSGIRequest,它里面包含了所有http请求的东西'''print(request)print(type(request))# from django.core.handlers.wsgi import WSGIRequest####################1 讲过的print(request.method)print(request.GET)print(request.POST)####################2 新讲的path,get_full_path,META,FILES,body# 自定制请求头# 上传文件使用的编码方式是form-data,默认编码方式urlencodedprint(request.is_ajax()) # 是不是ajax请求print(request.path)  # 请求路径print(request.get_full_path()) #请求全路径 ,带数据# print(request.body)  #请求体,二进制,如果传文件,这个报错'''使用form表单,默认情况下数据被转成name=lqz&password=123放到请求体中request.POST其实是从body中取出bytes格式的,转成了字典request.GET其实是把路径中?后面的部分拆出来,转成了字典'''print(request.encoding)  #客户端向服务端传递时,使用的编码方法print(request.META) #重点 (字典,一堆东西,请求用户的ip地址,请求头中数据,用户自定制请求头的数据)'''
把请求头的key值部分统一加HTTP_ 并且全部转成大写'''print(request.META['REMOTE_ADDR']) # 客户端的ip地址print(request.FILES) # 客户端上传的文件####################3 暂时不用关注(后面会讲)print(request.COOKIES) #空字典print(request.session)  # session对象print(request.user)  # 匿名用户return HttpResponse('ok')

三.视图层之响应对象

### 重点:JsonResponse的使用(看源码)
from django.shortcuts import render,HttpResponse,redirect
from django.http import JsonResponsedef index(request):#三件套# return HttpResponse('ok')# return render(request,'index.html',context={'name':'lqz','age':18})# return redirect('/home') # 重定向自己的地址,重定向第三方地址,经常跟反向解析一起使用 # 向客户端返回json格式数据的两种方式# 方式一:# import json# res = json.dumps({'name':'刘清政','age':18},ensure_ascii=False)# return HttpResponse(res)# django内置提供的JsonResponse# 本质还是HttpResponse# ensure_ascii# 方式二:# return JsonResponse({'name':'刘清政','age':18},json_dumps_params={'ensure_ascii':False})# safe,转换除字典以外的格式,需要safe=Falsereturn JsonResponse([11,22,13,'lqz',[1,2,3],{'name':'lqz','age':19}],safe=False)

补充知识之json序列化与反序列化

import json
# 数字,字符串,布尔,None,字典,列表都可以使用json序列化和反序列化
# 序列化
a = None
b = False
print(json.dumps(a))  # null
print(json.dumps(b))  # falsell=[11,12,13,'lqz']
res = json.dumps(ll)
print(res)  # [11,12,13,"lqz"]
print(type(res))  # <class 'str'># 反序列化
c = 'false'
print(json.loads(c)) # False

四.cbv和fbv

# cbv基于类的视图(class base view)和fbv基于函数的视图(function base view)
# 之前学的全是fbv,写的是视图函数# 写视图类(还是写在views.py中)
## 第一步,写一个类,继承view
from django.views import View
class Index(View):def get(self,request):  # 当url匹配成功,get请求,会执行它return HttpResponse('OK')def post(self,request):return HttpResponse('post')
## 第二步:配置路由
path('index/',views.Index.as_view()),# 前期,全是FBV,后期,drf全是CBV

五.文件上传

## html注意编码方式
<form action="/index" method="post" enctype="multipart/form-data"><p>用户名:<input type="text" name="name"></p><p>密码:<input type="password" name="password"></p><p><input type="file" name="myfile"></p><p><input type="submit" value="提交"></p>
</form># views.py
def index(request):file=request.FILES.get('myfile')# 打开一个空文件,写入with open(file.name,'wb')as f:for line in file.chunks():f.write(line)return HttpResponse('文件上传成功')

六.postman软件

模拟发送http请求(控制请求路径,请求方式,请求头,请求体)
在这里插入图片描述

七.form表单,提交地址

# action
#1 不写,默认向当前地址发送请求
#2 /index/,向当前域(http://127.0.0.1:8000/)的/index/发送请求
#3 http://127.0.0.1:8000/index/,向该地址发送请求(可以向第三方服务发送请求)# method
#1 post:发送post请求(默认编码情况下:以key=value&key=value的形式拼到请求体中)
#2 get:发送get请求(以key=value&key=value的形式拼到路径中)
<form action="/index/" method="post"><p>用户名: <input type="text" name="name"></p><p>密码: <input type="text" name="password"></p><p><input type="submit" value="提交"></p>
</form>

八.Pycharm的自动提示

from django.core.handlers.wsgi import WSGIRequest
# pycharm的自动提示
request=request # type:WSGIRequest

http://chatgpt.dhexx.cn/article/0Kd2GmFQ.shtml

相关文章

Postman的使用

一、Postman的使用 1、查看接口文档&#xff0c;分析接口的功能&#xff0c;请求方式&#xff0c;请求参数&#xff0c;查看参数中是否必填&#xff0c;是否唯一&#xff0c;参数类型&#xff0c;参数的长度&#xff0c;编写接口测试用例&#xff0c;使用postman执行接口测试用…

postman使用方法

一 、postman 界面功能介绍 1、工具栏 New: 新建&#xff0c;可以新建Request请求&#xff0c;Collection请求集&#xff0c;环境等等 Import: 导入&#xff0c;可以导入别人导出的请求集 Runner: 运行一个请求集&#xff08;批量执行&#xff09; Invite: 邀请&#xff08;需…

全网最全的 postman 工具使用教程

正文如下&#xff0c;如果觉得有用欢迎点赞、关注~~ postman是一款支持http协议的接口调试与测试工具&#xff0c;其主要特点就是功能强大&#xff0c;使用简单且易用性好 。 无论是开发人员进行接口调试&#xff0c;还是测试人员做接口测试&#xff0c;postman都是我们的首选…

Postman使用详解

一、Postman背景介绍 用户在开发或者调试网络程序或者是网页B/S模式的程序的时候是需要一些方法来跟踪网页请求的&#xff0c;用户可以使用一些网络的监视工具比如著名的Firebug等网页调试工具。今天给大家介绍的这款网页调试工具不仅可以调试简单的css、html、脚本等简单的网…

小程序setData执行后,页面没有刷新

这是两个tab页面&#xff0c;通过点击来切换页面&#xff0c;其实就是改变后台的数据 只是点击后&#xff0c;后台数据更新&#xff0c;但是页面却没有重新渲染。 以下是分析&#xff1a; isPayee: tab的值&#xff0c;当为1时&#xff0c;展示1号tab&#xff0c; 为0时&…

微信小程序this.setData()

在小程序中是没有DOM,BOM的&#xff0c;是数据驱动视图的。逻辑层中的 data 数据改变了,视图层 view 也会跟着改变,它是单向数据流的。如果想要触发视图中数据的更新,那么就需要借助setData这个方法用了setData的机制去把视图层和逻辑层做一个“中转站”两边连接起来。 当程序…

this.data与this.setData

https://www.jianshu.com/p/4fe2af286f7a this.setData({})用于将数据从逻辑层发送到视图层&#xff08;异步&#xff09;&#xff0c;同时改变对应的 this.data 的值&#xff08;同步&#xff09;。用this.data而不用this.setData({})会造成页面内容不更新的问题。 例如下面的…

setData的工作原理和注意事项

https://developers.weixin.qq.com/miniprogram/dev/framework/performance/tips.html https://developers.weixin.qq.com/miniprogram/dev/reference/api/Page.html 解决问题&#xff1a; setData 操作太频繁解决方案 很多页面都会有tab选项卡&#xff0c;有时候太频繁去点击…

遇到问题2:onLoad中使用setData无效

1.在微信开发者工具中更改data中的数据是使用setData这个方法&#xff0c;但是今天我碰到在onload周期中使用setData无效的问题(我在onLoad中调用了wx.getSetting方法&#xff0c;setData写在wx.getSetting中)&#xff0c;查了很久也没解决&#xff0c;后面发现主要是&#xff…

js中怎么获取某个属性的值_小程序中 setData 详解

前言 在小程序中各个页面之间是相互独立的,一个页面分为渲染层(视图层 webview),逻辑层(JavaScript),系统层(底层),在架构上,WebView和 JavascriptCore 都是独立的模块,并不具备数据直接共享的通道,换而言之,若要将逻辑层中的data的数据渲染到页面中,他们之间是无法直接通信的…

小程序 setData 动态 key 的写法

setData 是小程序开发中使用最频繁的接口&#xff0c;也是最容易引发性能问题的接口。 本篇文章主要说一说 setData 的正确使用 和 动态 key 的使用。 目录 Page.prototype.setData(Object data, Function callback) #1 什么时候应该使用 setData 函数&#xff1f; #2 常用的…

小程序setData函数小探究

官方文档可以知道 setData函数改变Page的data是同步的&#xff0c;会异步通知视图层data的改变&#xff0c;视图层收到通知后进行渲染。即官方文档里生命周期的Send Data箭头 callback分析 先上代码&#xff1a; Page({data: {theData: 1},onLoad: function(options) {conso…

微信小程序中this.setData is not a function报错问题

微信小程序中this.setData is not a function报错问题 新手在编写小程序时经常会遇到的一种错误。 新手在编写小程序时经常会遇到的一种错误。 在小程序中&#xff0c;通常我们用setData修改数据&#xff0c;用于函数时不会报错。 eg. setData function(e){this.setData({mob…

小程序中this.setData的使用和注意事项

前言&#xff1a;微信小程序中经常需要用到this.setData({})把变量值渲染到视图层&#xff0c;那到底什么是this.setData&#xff0c;如何使用&#xff1f;需要注意哪些&#xff1f;作为一个初学者&#xff0c;分享一点我的经验&#xff0c;希望大家批评指正。 介绍&#xff1a…

微信小程序setData()方法的使用

官方解释: setData 函数用于将数据从逻辑层发送到视图层&#xff08;异步&#xff09;&#xff0c;同时改变对应的 this.data 的值&#xff08;同步&#xff09;。 自己通俗的理解就是给数据复制用的, 结合一个demo说下setdata的使用 不如点击确定按钮把当前的值显示的布局中…

android setdata方法,Android intent.setData方法

1 从文本框中获取内容 EditText mobileText (EditText)findViewById(R.id.mobile); String mobile mobileText.getText().toString(); 2 打电话的权限 在功能清单中加入代码 编写代码实现Button的点击相应 Intent intent new Intent(); intent.setAction("android.inte…

微信小程序中 setData 详解

虽互不曾谋面,但希望能和您成为笔尖下的朋友 以读书,技术,生活为主,偶尔撒点鸡汤 不作,不敷衍,意在真诚吐露,用心分享 点击左上方,可关注本刊 标星公众号&#xff08;ID&#xff1a;itclanCoder&#xff09; 如果不知道如何操作 点击这里,标星不迷路 ━━━━━━ ━━━━━━…

微信小程序————setData()方法的使用和注意事项

微信小程序setData()使用&#xff1a; ##Page.prototype.setData(Object data, Function callback) setData 函数用于将数据从逻辑层发送到视图层&#xff08;异步&#xff09;&#xff0c;同时改变对应的 this.data 的值&#xff08;同步&#xff09;。 参数说明&#xff1a; …

微信小程序setData注意事项,使用方法

1..微信小程序开发中&#xff0c;为了减少data和视图层数据表现不一致&#xff0c;全部采用setData方法修改值。 setData函数注意事项 1..直接修改 this.data 而不调用 this.setData 是无法改变页面的状态的&#xff0c;还会造成数据不一致。 2..单次设罟的数据不能超过1024kB&…