django生命周期流程以及无有名分组和反向解析 JsonResponse和form表单上传
django的请求生命周期流程图
要求每个人必须会画,帮助你梳理django的大致流程
路由层
1. 路由匹配:urls.py 这个文件是django框架的总路由文件,意味着还有分路由文件,每个应用都支持有自己的路由文件。
# 控制django是否自动加斜杠匹配
APPEND_SLASH = False
url(r'^test/$', views.test),
'''
路由匹配规则:
路由从上往下依次匹配,如果路由第一次匹配到了,那么,就会执行对应的视图函数,就不在往下匹配了。
'''
2. django2中的路由文件
path # 精准匹配
re_path # 类似于url,支持正则表达式
无名分组有名分组
# 1. 无名分组: 正则表达式匹配大的内容用括号括起来
# 2. 有名分组:正则表达式匹配大的内容用括号括起来,然后起个名字
url(r'^test/(\d+)', views.test),
url(r'^test/(\d+)/(\w+)/(\d+)/(\d+)', views.test),
无名分组会把括号中匹配的数字当成位置参数传给视图函数, 支持多个匹配规则。
url(r'^test/(?P<year>\d+)/(?P<month>\d+)/(?P<day>\d+)', views.test),
有名分组会把括号中匹配的数字当成关键字参数传给视图函数, 支持多个匹配规则。
# 无名和有名不能混合使用
get请求传参方式:
https://www.bilibili.com/movie/?spm_id_from=333.1007.0.0
https://www.cnblogs.com/qingmiaokeji/p/16026631/a/1/b/2/c/3.html
反向解析
# 就是通过一个路由别名可以得到该别名对应的路由地址
# 后端反向解析
url(r'^test/v1/v2/v3/v4', views.test, name='aaaa'),
print(reverse('aaaa'))
# 前端反向解析
<a href="{% url 'aaaa' %}">点我</a>
# 无名分组反向解析
url(r'^test/(\d+)', views.test, name='xxxx'),
# 后端反向解析
print(reverse('xxxx', args=(id, )))
# 前端反向解析
<a href="{% url 'xxxx' 3333 %}">点我</a>
# 有名分组反向解析
url(r'^test/(?P<year>\d+)/(?P<month>\d+)', views.test, name='xxxx'),
# 后端反向解析
print(reverse('xxxx', args=(id, )))
# 前端反向解析
<a href="{% url 'xxxx' year=2022 month=9 %}">点我</a>
路由分发
以后我们的django项目会越来越大,那么就会导致总路由文件越来越大,非常难维护,我们会把总路由分开到不同的应用下面去。
'''
django支持每一个应用下面有自己的
1. urls.py
2. static文件夹
3. templates
'''
# 怎么样把这些应用串起来呢?就是使用路由分发
'''
使用路由分发的场景:一定是有多个应用的情况采用
'''
路由分发的两种方式:
1.
from app01 import urls as app01_urls
from app02 import urls as app02_urls
# url(), 的第一个参数不能加$
url(r'^app01/', include(app01_urls)),
url(r'^app02/', include(app02_urls)),
2.
# 第二种方式
url(r'^app01/', include('app01.urls')),
url(r'^app02/', include('app02.urls')),
名称空间(了解)
url(r'^app01/', include('app01.urls', namespace='app01')),
url(r'^app02/', include('app02.urls', namespace='app02')),
print(reverse('app01:xxxx'))
print(reverse('app02:xxxx'))
虚拟环境
# 针对不同的项目,创建出来一个新的python环境,类似于是一个纯净版的python解释器
JsonResponse
# 1. 混合项目开发:用不到json格式的数据
# 2. 前后端分离项目:用的都是json格式的数据
json格式的数据:跨语言数据传输
序列化数据为json
import json
1. dumps: 序列化
2. loads:反序列化
# 前端中序列化和反序列化
1. JSON.stringify() # 序列化
2. JOSN.parse() # 反系列化
from django.http import JsonResponse
def ab_json(request):
# user_dict = {'username': 'ly大帅哥', 'gender': 'male'}
l = [1, 2, 3]
# res = json.dumps(user_dict, ensure_ascii=False)
# return HttpResponse(res)
# return JsonResponse(user_dict,json_dumps_params={'ensure_ascii':False})
return JsonResponse(l, safe=False)
CBV和FBV的使用
1. FBV: function base viewd
2. CBV:class base viewd
CBV的路由:
# cbv的路由如何写?固定写法
url(r'^index_cbv/', views.IndexView.as_view()),
# CBV:必须继承View类
from django.views import View
# 在CBV中,类中的方法名不能所以叫,只能叫请求方式的名称
# get, post
# 请求方式一共有8种,目前学了2种
# 关键问题在于:CBV的路由该如何写?
# 是如何请求到get方法的呢?
# 如果你是get请求方式,那么就会触发get方法
# 如果你是post请求方式,那么就会触发post方法
class IndexView(View):
def get(self, request):
return HttpResponse('get')
def post(self, request):
return HttpResponse('post')
form表单上传文件
# form表单上传文件的条件:
1. method = 'post'
2. enctype="multipart/form-data"
# form表单上传文件
def ab_form(request):
# 如何接收文件数据呢?
if request.method == 'POST':
# 文件数据不在request.POST
# print(request.POST)
# print(request.GET)
# <MultiValueDict: {'myfile': [<InMemoryUploadedFile: django请求生命周期流程图.png (image/png)>]}>
print(request.FILES)
print(request.POST) # <QueryDict: {'username': ['root']}>
'''request.FILES只接收文件数据,其余数据不接收'''
file_obj = request.FILES.get('myfile') #
# 文件名称
print(file_obj.name) # pycahrm创建应用.png
'''怎么解决图片被覆盖的问题?'''
import uuid
rend_str=uuid.uuid4()
import random
file_path = str(rend_str) + '.png'
# with open(file_obj.name, 'wb') as f:
with open(file_path, 'wb') as f:
# 上传文件读取的时候要一行一行的读取,目的是为了防止内存爆满
for line in file_obj:
f.write(line)
return render(request, 'ab_form.html')
django生命周期流程以及无有名分组和反向解析 JsonResponse和form表单上传的更多相关文章
- Django框架三板斧本质-jsonResponse对象-form表单上传文件request对象方法-FBV与CBV区别
目录 一:视图层 2.三板斧(HttpResponse对象) 4.HttpResponse() 5.render() 6.redirect() 7.也可以是一个完整的URL 二:三板斧本质 1.Dja ...
- Django视图层/FBV与CBV/jsonResponse对象/form表单上传文件/request对象获取文件
目录 虚拟环境 视图层views 三板斧 jsonResponse对象 form如何上传文件/request对象获取文件 request对象方法 FBV与CBV CBV源码解析 虚拟环境 每创建一个虚 ...
- django 基于form表单上传文件和基于ajax上传文件
一.基于form表单上传文件 1.html里是有一个input type="file" 和 ‘submit’的标签 2.vies.py def fileupload(request ...
- Django表单上传
任务描述:实现表单提交(上传文件) 1.项目目录: 2.源代码: regist.html <!DOCTYPE html> <html lang="en"> ...
- Django---CBV和FBV的使用,CBV的流程,给视图加装饰器,Request对象方法,属性和Response对象,form表单的上传
Django---CBV和FBV的使用,CBV的流程,给视图加装饰器,Request请求对象方法,属性和Response响应对象,form表单的上传 一丶CBV和FBV 在Django中存 ...
- Django框架 之 Form表单和Ajax上传文件
Django框架 之 Form表单和Ajax上传文件 浏览目录 Form表单上传文件 Ajax上传文件 伪造Ajax上传文件 Form表单上传文件 html 1 2 3 4 5 6 7 <h3& ...
- Django学习笔记(6)——Form表单
知识储备:HTML表单form学习 表单,在前端页面中属于最常见的一个东西了.基本上网站信息的提交都用到了表单,所以下面来学习Django中优雅的表单系统:Form 表单的主要作用是在网页上提供一个图 ...
- Django生命周期,FBV,CBV
一. Django生命周期 首先我们知道HTTP请求及服务端响应中传输的所有数据都是字符串,在Django中,当我们访问一个的url时,会通过路由匹配进入相应的html网页中.Django的请求生命周 ...
- 学以致用三十三-----django生命周期
听了讲解django的视频后,受益匪浅,每个知识点老师都会总结整理.学会总结,存为己用. django生命周期弄明白后,对于整个django的框架会有一个清晰的了解.先上图 1.客户端发送请求,在dj ...
- django生命周期和事件委派
这是事件委派如果不用事件委派 直接绑定的话,新添加的按钮不会有删除或者编辑的功能 上面是事件委派的代码 新添加的编辑按钮可以弹出123 django生命周期: 这是Django的生命周期 首先会通 ...
随机推荐
- shell转义字符
\n 回车 \b 单词边界 \w [a-Z0-9]中任意一个字符 \W [^a-Z0-9] \d [0-9]中任意一个数字 \D [^0-9 ...
- CSS3 box-shadow盒子阴影
inset | offset-x | offset-y | blur-radius | spread-radius | color 阴影在边框内 x轴 y轴 模糊半径 扩散半径 阴影颜色 inset: ...
- Git 初始命令行
命令行指令 Git 全局设置 git config --global user.name "Administrator" git config --global user.emai ...
- python 识别登陆验证码图片(完整代码)
在编写自动化测试用例的时候,每次登录都需要输入验证码,后来想把让python自己识别图片里的验证码,不需要自己手动登陆,所以查了一下识别功能怎么实现,做一下笔记. 首选导入一些用到的库,re.Imag ...
- 使用骨架创建maven的web工程 maven工程servlet实例之间指定web资源包 实例之导入项目依赖的jar包 maven工程servlet实例之jar包冲突解决
使用骨架创建maven的web工程 操作一样把勾进行勾选找到webapp选项 下一步创建就行 创建好会有显示 目录结构其余的都需要自己手动补齐 有小蓝点的才是一个web项目, 如果上面都正确的话没有 ...
- Docker容器 获取宿主机CPU信息等或重启网卡命令操作介绍
一.作用场景及知识点 1. 使用场景(SSH方式除外): A. 运行在Docker容器里面的程序,怎么采集宿主机的CPU.内存.磁盘等信息: B. 容器内更改宿主机的网卡信息,怎么操作宿主机执行命令: ...
- Python 默认环境
查看pip默认安装目录 python -m site 查看已安装 pip list installed 查看安装位置 pip show PyMySQL
- 第三章:用python实现常用的用户分层模型(RFM模型)
文章目录 项目背景 读取数据 数据分析 分析 Recent 分析 Frequency 分析 Mount RFM模型 分位数分层 自定义分层 定义客户标签 数据可视化 结论 源码地址 本文可以学习到以下 ...
- 【BOOK】动态渲染页面爬取--Selenium库
动态渲染页面爬取 JavaScript动态渲染 其中一种方式是Ajax请求,通过直接分析Ajax再用requests来实现数据爬取 另外一种方式是模拟浏览器运行 一. Selenium库 Seleni ...
- word常用快捷键
输入公式:Alt + = 小写转大写:Shift + F3 \double{R}是实数符号