• Django_学习_02


    • 路由系统                      urls

    • 视图                             views

    • 模板                            TempLates

    • 静态文件和媒体文件   static

    • 中间件                           middleware

    • ORM                             databases

    1.路由系统

            a.传统路由

    urls 内容如下:

    1. from django.urls import path
    2. from app01 import views
    3. urlpatterns = [
    4. # path('admin/', admin.site.urls),
    5. path('login/', views.login),
    6. path('article',views.article),
    7. path('inOne//',views.inOne),
    8. path('abc//',views.abc)
    9. path('efg//',views.efg),
    10. path('hij/',views.hij),

    views 内容如下:

    1. from django.shortcuts import render,HttpResponse
    2. # Create your views here.
    3. def login(request):
    4. print('login')
    5. return HttpResponse('login')
    6. def article(request):
    7. return HttpResponse('article')
    8. def inOne(request,nid):
    9. print(nid)
    10. return HttpResponse('nid'+'inOne')
    11. def abc(request,a):
    12. print(a)
    13. return HttpResponse('abc')
    14. def efg(request,b):
    15. print(b)
    16. return HttpResponse('efg')
    17. def hij(request,c):
    18. print(c)
    19. return HttpResponse('hij')

    传统路由总结如下

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

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

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

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

    • uuid,uuid格式

    • path,路径,可以包含 /

            b.正则表达式路由

    urls 内容如下:

    1. from django.urls import path,re_path
    2. from app01 import views
    3. # 正则路由
    4. urlpatterns = [
    5. re_path(r'aaa/(\d+)/',views.aaa),
    6. re_path(r'bbb/(\w+)-(\d*)/',views.bbb), # 这样写就是按分组位置传参,views函数中形参随意定义
    7. re_path(r'ccc/(?P\w+)/(?P\d+)/',views.ccc), # s1,s2就是参数名称,views函数中参数必须定义为s1,s2
    8. ]

    views 内容如下:

    1. from django.shortcuts import render,HttpResponse
    2. # 正则路由
    3. def aaa(request,d):
    4. print(d)
    5. return HttpResponse('正则-aaa')
    6. def bbb(request,e,f): #e,f 按位置来结束url过来的参数,可以任意定义这两个形参
    7. print(e)
    8. print(f)
    9. return HttpResponse('正则-bbb')
    10. def ccc(request,s1,s2): #s1,s2是url固定带过来的必须定义为s1,s2 必须和urls中对应,可以理解成字典
    11. print(s1)
    12. print(s2)
    13. return HttpResponse('正则-ccc')
    • 正则需要导入re_path 
    • 需要在路径哪里前面加个r'aaa/(\w+)'
    • 这里必须用括号分组
    • 有多少个分组,views 中的对应的函数就需要多少个参数来对应  是和分组对应的
    • 有两种书写方式,这两个方式可以借助python的 args 和 kwargs 来理解  俗称一个不带名字一个带名字

    路由分发

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

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

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

  • 相关阅读:
    windows虚拟机迁移到新机器连不上网络
    HTTP 介绍
    交叉熵损失函数
    团建游戏------特尔斐决策技术
    通过浏览器打开某个应用程序
    力扣46. 全排列
    个人搭建frp服务及客户端连接实现网路穿透
    Html5播放器如何实现倍速播放
    XGBoost预测及调参过程(+变量重要性)--血友病计数数据
    开源自定义表单设计器的优点体现在哪些方面?
  • 原文地址:https://blog.csdn.net/weixin_42419429/article/details/134473885