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.简 ...
随机推荐
- Swoole_process实现进程池的方法
Swoole 的进程之间有两种通信方式,一种是消息队列(queue),另一种是管道(pipe),对swoole_process 的研究在swoole中显得尤为重要. 预备知识 IO多路复用 swool ...
- python twain模块
>>> help(twain) Help on module twain: NAME twain - Created on Sep 4, 2011 DESCRIPTION @auth ...
- Linux从入门到进阶全集——【第十四集:Shell编程-export命令】
参考: https://www.cnblogs.com/guojun-junguo/p/9855356.html 功能说明:设置或显示环境变量. 语 法:export [-fnp][变量名称]=[变量 ...
- oracle 密码详解以及破解
参考的相关资料等: https://docs.oracle.com/en/database/oracle/oracle-database/18/spmsu/finding-and-resetting- ...
- 微信小程序云开发-列表数据分页加载显示
一.准备工作 1.创建数据库nums,向数据库中导入108条数据 2.修改数据库表nums的权限 二.新建页面ListPaginated 1.wxml文件 <!-- 显示列表数据 --> ...
- 第十五篇 -- QListWidget与QToolButton(界面)
效果图: 这还只是一个界面,并没有实现相应功能. 先看下这图的构成吧. 工具栏的就是将Action拖上去,这部分前面已经介绍过了,那就看下面这部分的构图. 1.左侧是一个工具箱(ToolBox)组件, ...
- 第八篇--编写Windows服务
编写service服务参考网址:https://blog.csdn.net/nodeathphoenix/article/details/24181509 vc获得显示器状态(捕获息屏.亮屏网址):h ...
- 记一次jenkins svn构建过程
本文主要参考:maven实战第11章Hudson持续集成 安装Hudson,Hudson插件下载不了,尝试结果未果,转而使用Jenkins 放入tomcat的webapp目录,在bin下点击start ...
- 【阅读笔记】Java核心技术卷一 #4.Chapter6
6 接口.lambda 表达式与内部类 6.1 接口 6.1.1 接口概念 接口绝不能含有实例域:但在接口中可以定义常量,被自动设为 public static final 接口中的所有方法自动地属于 ...
- phpMyAdmin 4.0.x—4.6.2 远程代码执行漏洞(CVE-2016-5734)
影响范围 4.0.10.16之前4.0.x版本 4.4.15.7之前4.4.x版本 4.6.3之前4.6.x版本(实际上由于该版本要求PHP5.5+,所以无法复现本漏洞) 需要登录,且能够写入数据 p ...