路由层

  无名分组

  有名分组

  反向解析

  路由分发

  名称空间

伪静态网页

虚拟环境

视图层

  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 路由层 伪静态网页 虚拟环境 视图层的更多相关文章

  1. $Django 虚拟环境,2.0、1.0路由层区别,Httprequest对象,视图层(fbv,cbv),文件上传

    1 虚拟环境:解决问题同一台机器上可以运行不同版本的django,  1 用pychanrm创建--->files-->newproject--->选择虚拟环境  2 setting ...

  2. Django路由层与视图层、pycharm虚拟环境

    一. Django路由层 路由层即对应项目文件下的urls.py文件.实际上每个APP中也可以有自己的urls.py路由层.templates文件夹及static文件夹.Django支持这么做,也为实 ...

  3. Django路由层与视图层

    表与表之间建关系 图书管理系统为例 书籍表 出版社表 作者表 三个表之间的关系: 考虑表之间的关系:换位思考 1.书籍和出版社是一对多,外键字段建立在书籍表中 2.书籍和作者是多对多, 需要建立第三方 ...

  4. 关于Django路由层简单笔记

    Django—路由层 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于客户端发来的某个U ...

  5. Django 路由层与视图层

    1.路由层 1.1无名分组 1.2 有名分组 1.3 反向解析 1.4 路由分发 1.5 名称空间 2.伪静态网页 3.虚拟环境 4.视图层 1.1 JsonResponse 1.2 FBV与CBV ...

  6. Django路由层、视图层

    一.路由匹配: 第一个参数是正则表达式,匹配规则按照从上往下一次匹配,匹配到一个后立即停止 urlpatterns = [ url(r'^admin/', admin.site.urls), url( ...

  7. $Django 路由层(有,无名分组、反向解析、总路由分发、名称空间、伪静态)

    1 简单配置 -第一个参数是正则表达式(如果要精准匹配:'^publish/$')  -第二个参数是视图函数(不要加括号)  -url(r'^admin/', admin.site.urls), 注: ...

  8. Django --- 路由层(urls)

    目录 1.orm表关系如何建立 2.django请求生命周期流程图 3.urls.py路由层 4.路由匹配 5.无名分组 6.有名分组 7.反向解析 8.路由分发 9.名称空间 10.伪静态 11.虚 ...

  9. django 路由层(反向解析)03

    目录 ORM表关系建立 Django请求生命周期流程图 urls.py 路由层 无名分组 有名分组 反向解析 无名分组的反向解析 有名分组的反向解析 以编辑功能为例 路由分发 名称空间 伪静态 虚拟环 ...

随机推荐

  1. 【java设计模式】-02工厂模式

    工厂模式简述 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 在工厂模式中,我们在创建对象时不会对客 ...

  2. CF981D

    CF981D 题意: 给你n个数,要求你分成k堆.每堆的内部加和,每堆之间是相与.问最大的值. 解法: 二进制下最大的数的所有位一定是1,所以贪心去找是否最大一定是正确的. 然后DP记录+贪心就可以A ...

  3. 第七章 python基础之函数,递归,内置函数

    五 局部变量和全局变量 name='cyj' #在程序的一开始定义的变量称为全局变量. def change_name(): global name #global 定义修改全局变量. name=&q ...

  4. 使用git Bash Here 绑定账号密码错误后 无法自动重新绑定

    新安装的git 要打开gitbash 运行下面两个命令:1 git config --global user.name "Your Name"2 git config --glob ...

  5. 0ctf-ezdoor-复现分析

    在学习opcache的时候,看到了这个题目,刚好有环境,就来复现一下,这个题目也让我学到了很多. 创建镜像: docker build -t 0ctf-ezdoor . 启动容器: docker ru ...

  6. redis2. sds 字符串(SimpleDynamicString)

    1.标准strcat 会有溢出风险,sdscat无溢出风险 2.空间预分配,惰性空间释放 空间预分配:sds分配空间时,如果原来是5,free是0, sdscat追加一个10长度的,此时字符串加长到1 ...

  7. 11 MySQL之性能优化

    01-优化简介 MySQL数据库优化是多方面的,原则是减少系统瓶颈,减少资源的占用,增加系统的反应速度. 1.通过优化文件系统,提高磁盘I\O的速写速度: 2.通过优化操作系统的调度策略,提高MySQ ...

  8. 01 MySQL之数据库基本操作

    01-介绍 数据库(DataBase,DB)是一个长期存储在计算机内的.有组织的.有共享的.统一管理的数据集合. 02-基本操作 2.1 创建数据库 # 查看当前所有的数据库 show databas ...

  9. Java之分布式事务TCC

    看这个博客吧! 挺好的. 理论:https://www.cnblogs.com/jajian/p/10014145.html 实践:https://www.cnblogs.com/sessionbes ...

  10. Mysql 查询当前数据上一条和下一条的记录

    获取当前文件上一条与下一条记录的原理是上一条的sql语句,从news表里按从大到小的顺序选择一条比当前ID小的新闻,下一条的sql语句,从news表里按从小到大的顺序选择一条比当前ID大的新闻. 如果 ...