django 路由层 伪静态网页 虚拟环境 视图层
路由层
无名分组
有名分组
反向解析
路由分发
名称空间
伪静态网页
虚拟环境
视图层
JsonResponse
FBV与CBV
文件上传
项目urls.py下面
from app01 import views urlpatterns = [ url(r'^admin/',admin.site.urls),
url(r^$',views.home), #页面首页 正则匹配路由后面没有后缀 计时只有 就是只要点击127.0.0.1:8000直接显示的页面
url(r'^test/[0-9]{4}',views.test), #匹配的路由是test/四位数字 然后找到对应的视图函数
url(r'^testadd/$',views.testadd), #开头和结尾精确匹配才能匹配上 然后找到对应的视图函数
url(r'',views.error) #这是请求资源不存在的时候返回的对应的参数
] #注意:第一个参数是正则表达式,匹配规则按照从上往下依次匹配,匹配到一个之后立即,结束匹配,直接执行对应的视图函数
#网站首页路由
url(r'^$',views.home) #网站资源不存在页面
url(r'',views.error)
无名分组 (将加括号的正则表达式匹配到的内容当做位置参数自动传递给对应的视图函数)
url(r^test/(\d+)/',views.test), #无名分组 匹配一个或多个数字 def test(request,xxx):
print(xxx)
return HttpResponse('test')
有名分组(将加括号的正则表达式匹配到的内容当做关键字参数自动传递给对应的视图函数)
url(r'^test/(?P<year>\d+)',views.test) #有名分组 匹配一个或多个数字 给视图函数year参数传值 def test(request,year):
print(year)
return HttpResponse('test')
注意:无名分组和有名分组不能混着用!!!
url(r'^test/(\d+)/(?P<year>\d+)/',views.test)
但是支持用同类型多个形式匹配
无名分组多个
url(r^test/(\d+)/(\d+)/',views.test),
有名分组多个
url(r'^test/(?P<year>\d+)/(?P<xxx>\d+)/',views.test,
反向解析(根据名字动态获取到对应路径)
#项目urls下面路由与视图函数的对应关系
url(r'^test/(\d+)/',views.test,name = 'list'),
url(r^index688755/$',views.index,name='index')
#可以给每一个路由与视图函数对应关系起一个名字
#这个名字能够唯一标识出对应的路径
#注意这个名字不能重复是唯一的 #前端使用
{% url 'index' %}
{% url '你给路由与视图函数对应关系起的别名' %} #后端使用
from django.urls import reverse reverse('index')
reverse('你给路由与视图函数对应关系起的别名')
无名分组反向解析
url(r'^test/(\d+)/',views.test,name = list') #后端使用
print(reverse('list',args=(10,))) #前端使用
{% url 'list' 10 %} user_list = models.User.objects.all() url(r'^edit/(\d+)/',views.endit,name='edit')
#前端模板语法
{%for user_obj in user_list%}
<a href ='edit/{{ user_obj.pk}}/'></a>
{% endfor %} #视图函数
form django.urls import reverse
def edit(request,edit_id):
url = reverse('edit',args=(edit_id,)) #模板
{% url 'edit' edit_id %}
有名分组反向解析
#后端使用
#后端有名分组和无名分组都可以用这种形式
print(reverse('list',args=(10,))) #下面这个了解即可
print(reverse('list',kwargs={'year':10})) #前端使用
#前端有名分组和无名分组都可以用这种形式
{% url 'list' 10%}
#下面这了解即可
{% url 'list' year=10 %}
总结:针对有名分组与无名分组的反向解析统一采用一种格式即可
#后端
reverse('list',args=(10,)) #这里的数字通常都是数据的主键值
#前端
{% url 'list' 10 %} #反向解析的本质:就是获取到一个能够访问名字所对应的视图函数
路由分发
#django每一个app下面都可以由自己的url.py路由层, templates文件夹,static文件夹
#项目名下urls.py(总路由)不再做路由与视图函数的匹配关系而是做路由的分发 from django.conf.urls impout url,inclue #路由分发 注意路由分发总路由千万不要$结尾
url(r'^app01/',include(app01_urls)),
url(r'^app02/',include(app02_urls)) #在应用下新建urls.py 文件,在该文件内部写路由与视图函数的对应关系即可
form django.conf.urls import url
from app01 import views
urlpatterns = [
rul(r'^index/',views.index)
]
名称空间(了解)
from django.conf.urls import url,include
from app01 import urls as app01_urls
from app02 import urls as app02_urls url(r'^app01/',include(app01_urls,namespace='app01')),
url(r'^app02/',include(app02_urls,namespace='app02')) #加名称空间是因为app里面起别名都是一样的 反向解析后缀识别不出来
app01.urls.py
from django.conf.urls import url
from app01 import views
urlpatterns = [
url(r'^index/',views.index,name='index')
] app02.urls.py
from django.conf.urls import url
from app02 import views
urlpatterns = [
url(r'^index/',views.index,name = 'index')
] app01.views.py
reverse('app01:index') app02.views.py
reverse('app02:index') #第二种
#项目路由里面只需要写
url(r'^app01/,include(app01_urls)), app01.url.py
url(r'^index/',views.index,name='app01_index') app01.views.py
reverse('app01_index') 第三种 项目urls里面不用导入 app里面起别名和视图函数里面反转解析和第二种一样
项目里直接写
url(r'^app01/',include('app01.urls')),
url(r'^app02/',include('app02.urls'))
伪静态网页
#搜索优化seo
rul(r'^index.html',views.index,name='app01_index')
虚拟环境
不同的项目配置不同的python解释器
django 1.0与django 2.0之间的区别
#django 2.0 里面的path第一个参数不支持正则,你写什么就匹配什么,100%精准匹配 #django2.0里面的re_path对应的django1.0里面的url
虽然django2.0里面的path不支持正则表达式,但是它提供五个默认的转换器
str,匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式
int,匹配正整数,包含0
slug,匹配字母、数字以及横杠、下划线组成的字符串。
uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。
path,匹配任何飞空字符串,包含了路径分隔符(/)(不能用?)
自定义转换器
1正则表达式
2 类
3 注册
自定义转换器
from django.urls import path,re_path,register_converter
from django.shortcuts import HttpResponse
class FourDigitYearConverter:
regex = '[0-9]{4}'
def to_python(self, value):
return int(value)
def to_url(self, value):
return '%04d' % value # 占四位,不够用0填满,超了则就按超了的位数来!
register_converter(FourDigitYearConverter, 'yyyy')
PS:路由匹配到的数据默认都是字符串形式
FBV与CBV
FBV:基于函数的视图
CBV:基于类的视图
#CBV:
url(r^mycls/',views.MyCls.as_views()) from django.views import View
clas MyCls(Views):
def get(self,request):
return render(request,'index.html') def post(self,request):
return HttpResponse('post') #无论是FBV还是CBV路由层都是路由对应视图函数内存地址
urlpatterns = [
# url(r'^mycls/',views.view)
url(r'^mycls/',views.MyCls.as_view())
]
class MyCls(View):
def get(self,request):
return render(request,'index.html')
def post(self,request):
return HttpResponse('post')
JsonResponse
from django.http import JsonResponse def index(request):
#res = {'name':'Jsaon帅逼','password':'123'}
#return HttpResponse(jason.dumps(res)) #json默认会给中文编码 ensure_ascii=False 就不会编码了
return JsonRespose({'name':'Jason大帅比','password':''},json_dumps_params={'ensure_ascii':False})
默认只能传递字典类型,如果要传递非字典类型需要设置一下safe关键字参数。
response = JsonResponse([1, 2, 3], safe=False)
简单的文件上传
print('path:',request.path)
print('full_path:',request.get_full_path()) path:/upload_file/
full_path:/upload_file/?name=jason
前端需要注意的点:
1 method需要指定成post
2 enctype需要改为multipart/form-data格式
后端暂时需要注意的是
1 配置文件中注释掉 'django.middleware.csrf.CsrfViewMiddleware', 中间件
2 通过request.FILES获取用户上传的post文件数据
file_obj = request.FILES.get('my_file')
print(file_obj.name)
with open(file_obj.name,'wb') as f:
for line in file_obj.chunks():
f.write(line)
django 路由层 伪静态网页 虚拟环境 视图层的更多相关文章
- $Django 虚拟环境,2.0、1.0路由层区别,Httprequest对象,视图层(fbv,cbv),文件上传
1 虚拟环境:解决问题同一台机器上可以运行不同版本的django, 1 用pychanrm创建--->files-->newproject--->选择虚拟环境 2 setting ...
- Django路由层与视图层、pycharm虚拟环境
一. Django路由层 路由层即对应项目文件下的urls.py文件.实际上每个APP中也可以有自己的urls.py路由层.templates文件夹及static文件夹.Django支持这么做,也为实 ...
- Django路由层与视图层
表与表之间建关系 图书管理系统为例 书籍表 出版社表 作者表 三个表之间的关系: 考虑表之间的关系:换位思考 1.书籍和出版社是一对多,外键字段建立在书籍表中 2.书籍和作者是多对多, 需要建立第三方 ...
- 关于Django路由层简单笔记
Django—路由层 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于客户端发来的某个U ...
- Django 路由层与视图层
1.路由层 1.1无名分组 1.2 有名分组 1.3 反向解析 1.4 路由分发 1.5 名称空间 2.伪静态网页 3.虚拟环境 4.视图层 1.1 JsonResponse 1.2 FBV与CBV ...
- Django路由层、视图层
一.路由匹配: 第一个参数是正则表达式,匹配规则按照从上往下一次匹配,匹配到一个后立即停止 urlpatterns = [ url(r'^admin/', admin.site.urls), url( ...
- $Django 路由层(有,无名分组、反向解析、总路由分发、名称空间、伪静态)
1 简单配置 -第一个参数是正则表达式(如果要精准匹配:'^publish/$') -第二个参数是视图函数(不要加括号) -url(r'^admin/', admin.site.urls), 注: ...
- Django --- 路由层(urls)
目录 1.orm表关系如何建立 2.django请求生命周期流程图 3.urls.py路由层 4.路由匹配 5.无名分组 6.有名分组 7.反向解析 8.路由分发 9.名称空间 10.伪静态 11.虚 ...
- django 路由层(反向解析)03
目录 ORM表关系建立 Django请求生命周期流程图 urls.py 路由层 无名分组 有名分组 反向解析 无名分组的反向解析 有名分组的反向解析 以编辑功能为例 路由分发 名称空间 伪静态 虚拟环 ...
随机推荐
- 微信内置浏览器不支持APK附件下载的原因
由于微信的限制,应用文件在内置浏览器中下载全部被屏蔽掉,造成很多人用微信扫描二维码下载时点击下载按钮没反应,我想到的是做一个提示用户在浏览器中打开下载.其实原来很简单,就是判断当前是在微信内置浏览器中 ...
- UVA 796 Critical Links —— (求割边(桥))
和求割点类似,只要把>=改成>即可.这里想解释一下的是,无向图没有重边,怎么可以使得low[v]=dfn[u]呢?只要它们之间再来一个点即可. 总感觉图论要很仔细地想啊- -一不小心就弄混 ...
- Leetcode题目200.岛屿数量(BFS+DFS+并查集-中等)
题目描述: 给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量.一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的.你可以假设网格的四个边均被水包围. 示例 ...
- 安装docker以及常规操作
一.安装 docker对内核版本是有要求的,反正建议用7以上的版本,少坑 如果需要卸载旧版本(凡是卸载删除操作都要谨慎!): yum remove docker \ docker-client \ d ...
- redis的主从复制原理
1. 前言 和MySQL主从复制的原因一样,Redis虽然读取写入的速度都特别快,但是也会产生读压力特别大的情况.为了分担读压力,Redis支持主从复制,Redis主从复制可以根据是否是全量分为全量同 ...
- LightGBM新特性总结
LightGBM提出两种新方法:Gradient-based One-Side Sampling (GOSS) 和Exclusive Feature Bundling (EFB)(基于梯度的one-s ...
- 怎么彻底关闭卸载删除Cortana小娜进程,最简单
原文地址:https://jingyan.baidu.com/article/90bc8fc8be67bcf653640cfa.html Win10中的Cortana是微软开发的一款个人AI助理,集聊 ...
- SpringMVC整合Springfox-Swagger
https://www.jianshu.com/p/ab10860945c3 验证通过 关于Swagger的简介就不占篇幅了... 本文使用的Springfox-Swagger版本为2.8.0 要整合 ...
- Selenium 2自动化测试实战32(Fixtures)
Fixtures fixtures可以形象地把它看作是夹心饼干外层的两片饼干,这两片饼干就是setUp/tearDown,中间的心就是测试用例.除此之外,unittest还提供了更大范围的fixtur ...
- ZooKeeper Lead选举
前段时间学习了zookeeper,对其中比较难理解并且容易忘掉的知识点做一个记录~ 关键词: myId:表示在集群中,自身对应的id zxId:节点状态发生改变时,产生的一个时间戳,并且这个时间戳全局 ...