• python的Web框架:Django路由系统以及模板导入


    Django的路由系统

    当一个请求来到时
        当一个请求来到时
        1、首先到项目目录下的urls.py(根URLconf模块)中,查找路由规则;
        2、根URELcof模块,里面定义了 urlpatterns 变量;
        3、urlpatterns是一个(django.urls.path, dango.urls.re_path 对象)列表;
        4、按顺序运行没个url模式,在第一个匹配的模式停止;
        5、一旦匹配,django导入并调用给定的视图;
        6、如果中间出错,或者没有匹配到,返回404
    path方法,及默认参数

    默认参数需要配置的是路由(route),视图(view),kwargs和name是可选参数

    1     - path(route, view, kwargs=None, name=None)
    2         - route 是一个 字符串的url规则
    3         - view 是个视图
    4         - kwargs 额外参数,传递给view, 必须是一个字典
    5         - name url的命名
    正则表达式 re_path,可以配置需要的格式,如日期等
    1     - re_path(route, view, kwargs=None, name=None)
    2     
    3     python 中正则表达式的分组命名 : (?<name>pattern)
    4     
    5     例:
    6     re_path(r'students/(?P<year>\d{4})/(?P<mouth>[0-9]|1[0-2])', views.students)
    在url中捕获参数,参数的传递在path中配置
     1     - 在url中捕获参数
     2         在url规则中使用<变量名>可以捕获url中的值
     3           path('index/<变量名(key1)>/<变量名(key2)>', view.index)
     4           变量名还可以使用-连接:  <key>-<key>
     5         
     6         views.py内的函数需要写上参数,需要一一对应
     7           def detail(request, key1, key2)
     8         
     9         传递给视图
    10         ** 捕获的值是'字符串'
    11         
    12         在浏览器输入的时候也是相对应的:127.0.0.1:8000/index/'key1'/'key2'/
    路径转换器    - 路径转换器
       例子 <int:pk>
            常用的转换器:
                - str 匹配除了'/'路径分隔符之外的所有字符串
                - int 匹配任意整数
                - slug 匹配任意ASCII字符,加上连字符和下划线
                - uuid 格式化id
                - path 匹配任意非空字符
      例:
      path('index/<(int:key)>/', view.inedex)
    django 搜索 url搜索的是什么?
        只搜索路径部分,和参数,已经请求方法(get, post)无关
        
        同一个url 可以匹配 get,post
    包含其他URLconfs,在项目中添加(app 应用)下级urls的方法,include
    1 include方法
    2   from django.urls import include 
    3 
    4     path('teacher/', include('teacher.urls')) 
    5     
    6     同样也可以接受参数,但接受参数后,teacher下面的app都默认接受参数,会影响到views内的函数,也需要添加参数。所以需要谨慎使用。
    传递额外参数

    当kwargs中的key与url捕获中的key一致的时候,以kwargs为准

    1     path,re_path 方法中,传递一个kwargs的字典参数
    2     
    3     kwargs={key:value} 默认参数
    4     
    5     *****当kwargs中的key与url捕获中的key一致的时候,以kwargs为准*****
    6     如果是在项目主目录下的urls中include里添加,则是给项目下的某个app下面的所有urls添加额外默认参数
    7 
    8     include同上代码
    9     path('teacher/', include('teacher.urls'),kwargs={'key':'value'} 
    url命名,重定向
     1  from django.shortcuts import render, redirect, reverse
     2     views.py文件内操作
     3     
     4     重定向
     5     在函数内返回: return redirect('http://www.baidu.com')
     6     跳转
     7     return redirect('/teacher/index/') 硬编码
     8     
     9     在urls文件内path内定义name参数
    10     path('home/', views.index, name='index')
    11     
    12     动态解析重定向
    13     在views文件函数内需要添加一个变量
    14     
    15     url = reverse('index') 关键操作只要reverse的内容正确,url内的path内的路径可以动态变动
    16     return redirect(url)
    1     app_name
    2     模块内的命名,防止混淆,写在urls文件内
    3     app_name = 'teacher'
    4     在views文件内的函数内添加或者修改reverse
    5     def login(request):
    6         url = reverse('teacher:index')
    7     
    8     重定向
    9     redirect(url)

    HTML模板导入

    setting.py中设置模板的导入

    1 在TEMPLATES中的 'DIRS':[os.path.join(BASE_DIR,'templates(html模板位置的文件夹名)']

    渲染 views导入

    1     
    2     第一种写法
    3 
    4     from django.template.loader import get_template
    5 
    6     #def index(request):
    7         tp = get_template('teacher/index.html')  #获取模板下的文件
    8         html = tp.render()    #渲染html页面
    9         return HttpResponse(html)  返回html页面
    1     第二种写法(快捷方式:推荐)
    2 
    3     from django.shortcuts import render
    4     
    5     #def index(request):
    6         return render(request, 'teacher/index.html')

    此处完,谢谢观看……

  • 相关阅读:
    Mybatis的property与用户名密码等jdbc连接信息配置方式(一)使用properties文件
    Mybatis的#和$的区别
    Spring的依赖注入两种方式之一:setter注入
    Mybatis传递参数的各种方式:简单类型,@Param,map,java对象等等
    "蔚来杯"2022牛客暑期多校训练营2 KLink with Bracket Sequence I
    Villages: Landlines
    "蔚来杯"2022牛客暑期多校训练营1 D Mocha and Railgun
    3436403213password is internal pc
    test
    东方电气新进实力股东名单
  • 原文地址:https://www.cnblogs.com/hua888/p/10401721.html
Copyright © 2020-2023  润新知