网站制作建站程序,wordpress注册登陆,免费软件下载大全,django做的电子商务网站文章目录 一、路由层1.路由匹配url方法第一个是参数 的正则表达式 二、正则无名分组与有名分组无名分组有名分组 三、反向解析1.概念无名分组动态路由解析有名分组动态路由解析 四、路由分发为什么要用路由分发#xff1f; 1.总路由分发配置名称空间 五、伪静态的概念六、虚拟… 文章目录 一、路由层1.路由匹配url方法第一个是参数 的正则表达式 二、正则无名分组与有名分组无名分组有名分组 三、反向解析1.概念无名分组动态路由解析有名分组动态路由解析 四、路由分发为什么要用路由分发 1.总路由分发配置名称空间 五、伪静态的概念六、虚拟环境什么是虚拟环境如何创建虚拟环境 django1和django2的区别1. 路由文件Django默认支持以下5个转化器 一、路由层
1.路由匹配
Django 1.x中第一个参数是正则表达式 Django 2.x 及以上版本 path第一个参数写的是什么就匹配什么匹配到直接执行对应的视图函数精准匹配不支持正则表达式 settings配置文件内添加控制django是否自动添加斜杠匹配
APPEND_SLASH False/True # 默认是True自动添加斜杠如果不想每次点击http://127.0.0.1:8000/跳转出报错的话可以在路由里指定
url(r^$, views.test),为空的时候加载页面为testurl方法第一个是参数 的正则表达式
urlpatterns [path(^admin/, admin.site.urls),# 首页 默认进去path(^$,views.home),# 路由匹配path(^test/$,views.test),path(^testadd/$,views.testadd),# 尾页(了解 后期异常捕获)path(,views.error),
]解析:^ : 开头$ : 结尾 二、正则无名分组与有名分组
无名分组
无名分组就是给某一段正则表达式用括号括起来
url(r^test/(\d)/$, views.test)
无名分组会将括号内正则表达式匹配到的内容当做位置参数传递给视图函数get请求的第一种方式 http://127.0.0.1:8000/test/?a1b2
get请求的第二种方式 http://127.0.0.1:8000/test/123/11
代码实现
urls.py
# 会把括号中匹配的数字当成位置参数传给视图函数
url(r^test/(\d)/$,views.test)views.py
def test(request,xx):print(xx)return HttpResponse(test)正则:
\d : 匹配任意数字有名分组
url(r^test/(?Pyear\d)/(?Pmonth\d)$, views.test),
有名分组就是把正则中小括号里的匹配到的内容以关键字参数的形式传递给视图函数有名无名不可以混合使用但是可以分别多次使用1.无名分组单个使用多次
path(^index/(\d(4))/(\d(4))/(\d(4))/,views.index),2.有名分组单个使用多次
path(^index/(?Pyear\d)/(?Page\d)/(?Pmonth\d)/,views.index),def index(request,*args,**kwargs):print(args)return HttpResponse(index)三、反向解析
路由频繁变化的时候html页面与后端上的链接地址如何做到动态解析呢
通过在url里面设置路由和视图函数的别名动态解析出对应的路由该路由直接执行对应的函数函数直接执行对应的url
1.概念
通过一些方法得到一个结果该结果可以直接访问对应的url触发视图函数实现url路由频繁变化HTML界面与后端动态解析链接地址操作步骤
1.反向解析器路由配置
url(r^1/2/3/4/testadd/$, views.testadd, nametestadd), # nametestadd 起别名
前后端反向解析
2.在视图文件中导入模块reverse
from django.shortcuts import render,HttpResponse,redirect,reverse
3.反向解析 reverse(testadd)
def test(request):print(reverse(testadd))return render(request,index.html)
前端反向解析
4.前端模板文件反向解析
a href{% url testadd %}点击跳转/a无名分组动态路由解析
1.反向解析路由配置
url(r^1/2/3/4/testadd/(\d)/(\d)/$, views.testadd, nametestadd),2.在视图文件中导入reverse模块
from django.shortcuts import render,HttpResponse,redirect,reverse3.反向解析 reverse(testadd args(1,123))
def test(request,*args,**kwargs):res reverse(testadd)print(res)print(args,kwargs)return render(request,index.html)前端反向解析
4.前端模板文件反向解析
a href{% url testadd 1 123 %}点击跳转/a 根据路由来需要添加2个参数有名分组动态路由解析
1.反向解析路由配置
url(r^1/2/3/4/testadd/(?Pyear\d)/(?Pmonth\d)/$, views.testadd, nametestadd),2.在视图文件中导入reverse模块
from django.shortcuts import render,HttpResponse,redirect,reverse3.反向解析
reverse(testadd args(1,123))
reverse(testadd kwargs{year:1,month:123})def test(request,*args,**kwargs):res reverse(testadd)print(res)print(args,kwargs)return render(request,index.html)前端反向解析
4.前端模板文件反向解析
a href{% url testadd year1 month123 %}点击跳转/a 根据路由来需要添加2个关键字参数四、路由分发
django支持每个应用都可以由自己独立的路由层url.py、静态文件(static文件夹)、模板层templates。基于该特性多人开发项目就可以完全解耦合之后利用路由分发还可以整合到一起
为什么要用路由分发
解决项目的总路由匹配关系过多的情况总路由分开于干路由与视图函数的的直接对应关系总路由是一个分发处理识别当前url是属于哪个应用下的直接分发对应的应用去处理当请求来了总路由不做对应关系根据请求直接访问哪个app的功能直接将请求发送给对应的app提前创建好应用app01(创建即注册)、app02然后记得注册app02
1.总路由分发配置
使用路由分发之前总路由直接干路由与属于函数的匹配
方式一
1.需要导入一个include路由分发模块
from django.conf.urls import url,include
2.导入子路由的urls 为了重名起别名
from app01 import urls as app01——urls
from app02 import urls as app02——urls
urlpatterns [url(r^admin/, admin.site.urls),# 1.路由分发url(r^app01/,include(app01_urls)), # 只要url前缀是app01开头 全部交给app01处理url(r^app02/,include(app02_urls)) # 只要url前缀是app02开头 全部交给app02处理
]方式二
1.需要导入一个include路由分发模块
from django.urls import path,include
2.总路由分发 简易推荐
urlpatterns [
# 路由分发终极写法 简便path(app01/,include(app01.urls)),path(app02/,include(app02.urls))名称空间
路由分发之后针对相同的别名是否能自动反向解析不同的应用前缀默认情况下是无法直接识别应用前缀的如果想要正常识别应用前缀有以下两种方式
总路由
path(app01/,include((app01.urls,app01),namespaceapp01)), # 创建了名称空间app01
path(app02/,include((app02.urls,app02),namespaceapp02)), # 创建了名称空间app02反向解析
后端
def index(request):print(reverse(app01:index_view))return HttpResponse (index from app01)def index(request):print(reverse(app02:index_view))return HttpResponse reverse(app02:index_view)前端页面
{% url app01:index_view%}子路由
urlpatterns [url(^index/,views.index,nameindex_view)
]
urlpatterns [url(^index/,views.index,nameindex_view)
]
方式2别名不冲突即可 利用应用名作为别名的前缀
1.总路由
urlpatterns [url(admin/, admin.site.urls),# 路由分发url(app01/,include(app01.urls)),url(app02/,include(app02.urls))
]2.子路由
urlpatterns [url(index/,views.index,nameapp01_index_view)url(index/,views.index,nameapp02_index_view)
]
3.后端reverse(app01_index_view)reverse(app02_index_view)总结只要保证名字不冲突骂我们就没必要使用名称空间直接在路由起别名的时候加载app名作为别名的前缀
五、伪静态的概念
伪静态: 其实就是把动态页面改成静态页面
动态页面它不是在html页面中写死的它是根据后端的数据变化而变化我们的页面上的数据是从数据库查询出来都是可以是动态页面静态页面htmlcss
案例https://www.cnblogs.com/bigsai/p/17827160.html # 这个就是伪装之后的页面
伪装的目的为了更好的被各大搜索引擎抓大静态页面是最容易被抓到的有个别的网站就会做伪装seoseo优化关键词被容易搜索到sem: 广告(RMB)
怎么样去伪装 url(r^v1/v2/test.html/$, views.test)六、虚拟环境
什么是虚拟环境
项目1需要使用:django1.11 python38
项目2需要使用:django2.22 pymysql requests python38
项目3需要使用:django3.22 request_html flask urllib3 python38虚拟环境:能够针对相同版本的解释器创建多个分身 每个分身可以有自己独立的环境pycharm创建虚拟环境:(每创建一个虚拟环境就相当于重新下载了一个全新的解释器)实际开发过程我们需要给不同的项目配备不同的环境项目需要用到的环境是什么我们就给装什么样的环境。一般不用的我们不装因为虚拟环境创建太多第三方模块或者工具太是会消耗硬盘空间。
目前我们不使用虚拟环境所有的模块统一下载到本地
如何创建虚拟环境
1.pycharm创建虚拟环境
1、创建虚拟环境
2、虚拟环境标志
3、虚拟环境下载django
4、使用虚拟环境如果下载过程出现问题了就复制提示的解决方法到文件上方框里去执行
pip install --index-url http://mirrors.aliyun.com/pypi/simple/ django1.11.11 --trusted-host mirrors.aliyun.comdjango1和django2的区别
1. 路由文件
django1.x中使用的是url:支持正则 django2.x中使用的是path(不支持正则:精准匹配)和re_path(url)支持正则 path但是它只支持五种转换器
Django默认支持以下5个转化器
● str,匹配除了路径分隔符/之外的非空字符串这是默认的形式 ● int,匹配正整数包含0。 ● slug,匹配字母、数字以及横杠、下划线组成的字符串。 ● uuid,匹配格式化的uuid如 075194d3-6885-417e-a8a8-6c931e272f00。 ● path,匹配任何非空字符串包含了路径分隔符/不能用