当前位置: 首页 > article >正文

Django_学习_02

  • 路由系统                      urls

  • 视图                             views

  • 模板                            TempLates

  • 静态文件和媒体文件   static

  • 中间件                           middleware

  • ORM                             databases

1.路由系统

        a.传统路由

urls 内容如下:

from django.urls import path
from app01 import views
urlpatterns = [
    # path('admin/', admin.site.urls),
    path('login/', views.login),
    path('article',views.article),
    path('inOne/<int:nid>/',views.inOne),
    path('abc/<str:a>/',views.abc)
    path('efg/<slug:b>/',views.efg),
    path('hij/<path:c>',views.hij),
   

views 内容如下:

from django.shortcuts import render,HttpResponse

# Create your views here.
def login(request):
    print('login')
    return HttpResponse('login')

def article(request):
    return HttpResponse('article')

def inOne(request,nid):
    print(nid)
    return HttpResponse('nid'+'inOne')

def abc(request,a):
    print(a)
    return HttpResponse('abc')

def efg(request,b):
    print(b)
    return HttpResponse('efg')
def hij(request,c):
    print(c)
    return HttpResponse('hij')

传统路由总结如下

格式是<类型:参数>  且这个方式是可以传递参数到函数及views里面

  • int,整数 #匹配整数 格式 < 数据类型 : 数据 >

  • str,字符串  #匹配字符串

  • slug,字母+数字+下滑线+- # 匹配 字母+数字+下划线 + -号等

  • uuid,uuid格式

  • path,路径,可以包含 /

        b.正则表达式路由

urls 内容如下:

from django.urls import path,re_path

from app01 import views


# 正则路由
urlpatterns = [
    re_path(r'aaa/(\d+)/',views.aaa),
    re_path(r'bbb/(\w+)-(\d*)/',views.bbb), # 这样写就是按分组位置传参,views函数中形参随意定义
    re_path(r'ccc/(?P<s1>\w+)/(?P<s2>\d+)/',views.ccc), # s1,s2就是参数名称,views函数中参数必须定义为s1,s2

]

views 内容如下:

from django.shortcuts import render,HttpResponse

# 正则路由
def aaa(request,d):
    print(d)
    return HttpResponse('正则-aaa')

def bbb(request,e,f):  #e,f 按位置来结束url过来的参数,可以任意定义这两个形参
    print(e)
    print(f)

    return HttpResponse('正则-bbb')

def ccc(request,s1,s2):  #s1,s2是url固定带过来的必须定义为s1,s2 必须和urls中对应,可以理解成字典
    print(s1)
    print(s2)
    return HttpResponse('正则-ccc')
  • 正则需要导入re_path 
  • 需要在路径哪里前面加个r'aaa/(\w+)'
  • 这里必须用括号分组
  • 有多少个分组,views 中的对应的函数就需要多少个参数来对应  是和分组对应的
  • 有两种书写方式,这两个方式可以借助python的 args 和 kwargs 来理解  俗称一个不带名字一个带名字

路由分发

假如一个项目中有很多个功能,可以分到多个app中,

inlucde + 多apps(一般),将功能拆分不到不同的app中。在每个app中创建每个app自己的路由(urls)。例如有两个app分别是 api web 格式如下:

from django.urls import path,include
urlpatterns = [
    path('api/',include('apps.api.urls')),  # api 是app目录且后面必须加/ ,include后面是app对应的子路由路径
    path('web/',include('apps.web.urls')),  # web 是app目录且后面必须加/ ,include后面是app对应的子路由路径
    
]


http://www.kler.cn/news/135359.html

相关文章:

  • GO 抽象工厂模式设计
  • 『亚马逊云科技产品测评』活动征文|通过lightsail一键搭建Drupal VS 手动部署
  • 快速集成Skywalking 9(Windows系统、JavaAgent、Logback)
  • Django学习日志08
  • 详解JS遍历数组的十八种方法
  • 微分方程,含矩阵的指数函数
  • MAC上修改mysql的密码(每一步都图文解释哦)
  • html-网站菜单-点击菜单展开相应的导航栏,加减号可切换
  • LaTex 空行
  • 企业实现员工聊天和转账行为的实时监管
  • 见面礼——图论
  • 01_SHELL编程之变量定义(一)
  • 【Python】12 GPflow安装
  • 大批量合并识别成一个表或文档的方法
  • P8611 [蓝桥杯 2014 省 AB] 蚂蚁感冒(模拟)
  • UEFI实战——键盘操作
  • reset函数的使用
  • java桌面程序
  • leetcode刷题之哈希表的应用(1)
  • Java(三)(static,代码块,单例设计模式,继承)
  • Swagger-----knife4j框架
  • 迎接“全全闪”时代 星辰天合发布星海架构和星飞产品
  • 集群路径规划学习(一)之EGO-swarm仿真
  • Kettle 简介
  • 读《Segment Anything in Defect Detection》
  • Spring Boot 中使用 ResourceLoader 加载资源的完整示例
  • 使用 Amazon VPS 探索存储选项:实用指南
  • Flutter 3.16 中带来的更新
  • selenium长截图,截图整个页面
  • (C)一些题2