Django 反向解析 request CBV
正则路径中的分组
无名分组
分组的概念:就是给某一段正则表达式用小括号括起来
无名分组按位置传参数,一一对应。
view中除去request,其他形参数量要与urls中分组数量一致。
无名分组就是将括号内匹配到的内容当作位置参数传递给后面的视图函数
urls.py:
urlpatterns = [
url(r'^test/([0-9]{4})', views.test)]
views.py
from django.shortcuts import HttpResponse
def index(request,year):
print(year) # 一个形参代表路径中一个分组的内容,按顺序匹配
return HttpResponse('kkk')
有名分组
有名分组按关键字传参,与位置顺序无关。
views 中除了 request,其他形参的数量要与 urls 中的分组数量一致, 并且 views 中的形参名称要与 urls 中的组名对应。
(?P<组名>正则表达式)
# 有名分组相当于给正则表达式取了别名
urlpatterns = [
url(r'^test/([0-9]{4})', views.test)]
from django.shortcuts import HttpResponse
def index(request,year):
print(year) # 形参和分组名要一致
return HttpResponse('kkk')
有名分组就是将括号内正则表达式匹配到的内容当作关键字参数传递给后面的视图函数,需要注意的是有名无名不可以混用
反向解析
随着功能的增加,路由层的 url 发生变化,就需要去更改对应的视图层和模板层的 url,非常麻烦,不便维护。
这时我们可以利用反向解析,当路由层 url 发生改变,在视图层和模板层动态反向解析出更改后的 url,免去修改的操作。
反向解析一般用在模板中的超链接及视图中的重定向。
# 在urls.py 中给路由起别名
url(r'^hub_login/', views.login, name='login2')
def login():
return HttpResponse('login')
# 后端反向解析
# 在views.py 导入reverse模块
res = reverse('login2')
print(res)
# 可以动态获取url路径
# 前端反向解析
<a href="{% url 'login2' %}">登录</a>
# 这时候无论路径怎么改,html页面的路径都会动态更新
有名分组无名分组反向解析
# 无名分组反向解析
url(r'^index/(\d+)/', views.index, name = 'xxx')
# 前端
{% url 'xxx' 123 %}
# 后端
reverse('xxx', args=(1,))
# 数字一般情况下放的是数据的主键值 数据的编辑和删除
# 有名分组反向解析
url(r'^index/?<year>P(\d+)/', views.index, name = 'xxx')
<a href="{% url 'xxx' 123 %}"</a>
print(reverse('xxx',kwargs={'year':123}))
# 简便写法
print(reverse('xxx',args=(123,)))
路由分发
Django 的每一个应用都可以有自己的templates文件夹、urls.py static文件夹,正是基于上述特点,能够做到分组开发。当所有url都放在一个url里面会造成冗余不好维护。利用路由分发,总路由识别当前url是属于哪个应用下的,直接分发给对应的应用去处理。
import include
url(r'^app01/', include('app01.urls')),
url(r'^app02/', include('app02.urls'))
JsonResponse对象
from dajango.http import JsonResponse
def test(request):
d1 = {'kk': '你懂', 'dqin': '今晚你的节目'}
res = JsonResponse(d1, json_dumps_params={'ensure_ascii': False})
return HttpResponse(res)
如果传入的不是字典还应该加上 safe=False
FBV与CBV
视图函数既可以是函数也可以是类,FBV:function base view,CBV:class base view,CBV会根据请求方式不同匹配到对应的方法执行。
from django.views import View
# CBV必须继承View
class Mylogin():
http_methods_name = ['get', 'post'] # 这样可以限制请求方式 有限查找内部方法
def get(self, request):
return HttpResponse('get')
def post(self, request):
return HttpResponse('post')
# 路由书写方法
url(r'^login/', views.MyLogin.as_View())
request对象中的方法补充
request.FILES # 可以获取到上传的文件数据
request.FILES.get('文件名') # 可以将它取出
request.path # 获取到对应的路由
request.get_full_path() # 获取到对应路由和后面的参数
# 上传文件必须做的两件事:
1、请求方式改成post
2、改enctype=multipart/form-data
Django 反向解析 request CBV的更多相关文章
- django反向解析URL和URL命名空间
django反向解析URL和URL命名空间 首先明确几个概念: 1.在html页面上的内容特别是向用户展示的url地址,比如常见的超链接,图片链接等,最好能动态生成,而不要固定. 2.一个django ...
- Django 反向解析
#1,定义: #随着功能的增加会出现更多的视图,可能之前配置的正则表达式不够准确,于是就要修改正则表达式,但是正则表达式一旦修改了,之前所有对应的超链接都要修改,真是一件麻烦的事情,而且可能还会漏掉一 ...
- Django反向解析与分组命名
1.图书管理系统中使用分组或命名分组.URL的命名和反向解析: 2.删除功能三合一: urls.py文件 from app_book import views urlpatterns = [ url( ...
- django反向解析和正向解析
Django的正向解析和反向解析 先创建一个视图界面 urls.py index.html index页面加载的效果 正向解析 test/?result=1 所谓正向解析就是直接在这里写地址 向url ...
- django反向解析传参
这两天写代码总是有反向解析传参顺带复习了一下反向解析,以下是简单的反向解析 以下是我最近写的很多的反向解析传参 想要实现点击修改将这些从数据库读取的内容传到另一个页面就要通过id来查询,那么我们就需 ...
- django之路由分组,反向解析,有名,无名分组
路由层 无名分组 有名分组 反向解析 路由分发 名称空间 伪静态的概念 urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'test',vi ...
- Web框架之Django_03 路由层了解(路有层 无名分组、有名分组、反向解析、路由分发 视图层 JsonResponse,FBV、CBV、文件上传)
摘要: 路由层 无名分组 有名分组 反向解析 路由分发 名称空间 伪静态网页.虚拟环境 视图层 JsonResponse FBV 与 CBV(function base views与class bas ...
- Django之路由分发和反向解析
一.路由分发: 路由分发是指:总路由不再直接做路由与视图函数的对应关系,而是将获取的路由分发给下面的app去处理对应关系 from django.conf.urls import url,includ ...
- Django3 Django 路由分发,反向解析,2.0版本的path
urls配置像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于客户端发来的某个URL调用哪一段逻辑代码对应执行. 1.简 ...
随机推荐
- 关于easyswoole实现websocket聊天室的步骤解析
在去年,我们公司内部实现了一个聊天室系统,实现了一个即时在线聊天室功能,可以进行群组,私聊,发图片,文字,语音等功能,那么,这个聊天室是怎么实现的呢?后端又是怎么实现的呢? 后端框架 在后端框架上,我 ...
- pixel的Edxposed刷机过程
1.先解开bl锁 这里的步骤,因为我机子本来就是解过的了,所以简单记录一下过程好了 第一步:确保你的环境变量是否设置好了,判断的标准就是打开终端(我是mac),usb连接上,然后输入 adb devi ...
- Vue3 + TypeScript 开发实践总结
前言 迟来的Vue3文章,其实早在今年3月份时就把Vue3过了一遍.在去年年末又把 TypeScript 重新学了一遍,为了上 Vue3 的车,更好的开车.在上家公司4月份时,上级领导分配了一个内部的 ...
- 不同版本docker修改存储位置补充
前言:最近发现yum安装docker,安装的版本不一样,有点蛇皮,虽然存放默认位置都是/var/lib/docker,但是它的配置文件不一样,这里做个补充 对于docker版本是1.13及以下 操作如 ...
- ESP32省电模式连接WIFI笔记
基于ESP-IDF4.1版本 main.c文件如下: #include <string.h> #include "freertos/FreeRTOS.h" #inclu ...
- Servlet核心技术
一.基本概念 1.C/S C/S架构是客户端服务器架构,将需要处理的业务合理的分配到客户端和服务器,客户端负责与用户的交互任务,服务器负责数据管理. 优点: 客户端界面和功能可以很丰富 应用服务器负荷 ...
- excel带格式复制python
openpyxl 复制cell单元格包括所有样式 target_cell.data_type = source_cell.data_type target_cell.fill = copy(sourc ...
- React事件绑定的方式
一.是什么 在react应用中,事件名都是用小驼峰格式进行书写,例如onclick要改写成onClick 最简单的事件绑定如下: class ShowAlert extends React.Compo ...
- StreamAPI
一.简介 Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利.高效的聚合操作,或者大批量数据操作 . Stream API 借助于同样 ...
- mitmproxy第一次尝试-猿人学第九题
启动 mitmdump -s http_proxy.py -p 9000 替换js代码 # -*- coding: utf-8 -*- import re main_url = 'http://mat ...