美文网首页
2019-02-16 url 解析,重定向 ,和模板

2019-02-16 url 解析,重定向 ,和模板

作者: 太阳出来我爬山坡 | 来源:发表于2019-02-16 18:09 被阅读0次

    url结构:
    例子:http://www.baidu.com:8080/news/index.html?id=1111%page=12#name
    协议// 域名(ip):端口/ 路径 ? 参数 #锚点
    1.url:
    网址 全网统一资源定位符
    格式
    2.django 的路由系统
    当一个请求来到时
    1.首先到项目目录下的urls.py(根URlconf模块)中,查找路由规则
    2.根URlconf模块,里面定义了 urlpatterns变量
    3.urlpatterns 是一个(django.url.path 或 django.urls.re_path对象 )列表
    4.按顺序运行每个url模式,在第一个匹配的模式停止
    5.一旦匹配,djangon导入并调用给定的视图
    6.如果中间出错,或者没有匹配到,返回404

    -path对象
    path(route,view,kwargs=None,name=None)
    router参数: 一个字符串的urlf规则  
        可以传参数 
        例: path('index/<参数1>-<参数2>',view)  #传递了 参数1,参数2 用 -间隔, 可以用其他符号
            path('index/<pk>-<date>',view1)  url:   http://0:8000/index/1-201801 
            path('index/<pk>/<date>',view1)  url:   http://0:8000/index/1/201801 
        
        在视图中 定义  def index(request,pk,date):  # 必填参数
                            return HttpResponse('lalallalala %s%s' %(pk, date))
    -在url中捕获参数
        在url规则中使用<变量名>可以捕获url中的值
        传递给视图
        **默认捕获值是 str 字符串
        path('index/<int:pk>',view1)  # 定义参数的数值类型
        1.str 匹配了'/'路径分割符之外的所有字符
        
        2.int  匹配任意整型   ,会转换成 int 类型
        http://192.168.3.20:8000/detail/12/
        参数值为:12
        3.slug 匹配任意ascll字符 加上连字符和下划线
        
        4.uuid 格式化id
        http://192.168.3.20:8000/uuider/9b1deee5-4035-4398-b5f9-54ba28c94566/
        参数值为:9b1deee5-4035-4398-b5f9-54ba28c94566/
        5.path 匹配任意非空字符
        http://192.168.3.20:8000/pather/a/b/c/
        参数值为:a/b/c/
        
    -使用正则表达式re_path()
        re_path(r'student/(\d{4})/([0][1-9]|1[0-2])/', views.student)
        http://192.168.3.20:8000/student/2018/09/
        re_path(r'student/(?P<year>\d{4})/(?P<month>[0][1-9]|1[0-2])/', views.student)
          ?P<year> ?P<month> 指定变量
        python 中正则表达式的分组命名 (?P<name>正则表达式)
    
    - django 搜索url 搜索什么?
        只搜索url的路径部分,  跟 参数 以及请求方法 无关
        同一个url 可以匹配 get  post
        
    
        
    -传递额外参数kwargs
        kwargs 字典类型
            path('detail/<int:pk>/', views.detail, kwargs={'pk':20}) 
            额外参数和 路径中捕获的参数 同名时, 覆盖路径中的参数
            path('detail/<int:pk>/', include('teatch'), kwargs={'pk':20})
                下级url组中teatch下url都 将带上 这个额外参数
                
        
    -包含其他 URLconfs
        include
        根urls
        urlpatterns =[
            path('teatch/',include('teacher.urls'))    导入子app 'teacher'下的urls
            path('teatch/<参数>',include('teacher.urls'))    导入子app 'teacher'下的urls
        ]
           上级路径中的参数和额外参数 会传到下级路径 对象中去.
        子app urlpatterns
        1.views 应该写在app的目录中
            app的urls 
            http://192.168.3.20:8000/teacher/detail/2018/09/)
            子app中下级路径
            
    -重定向 
        
        view 中 
        from django.shortcuts import render, redirect ,reverse
        # 导入 render渲染(作用把对象变成 文本, 用于返回给服务器)   
        # redirect重定向
        # reverse 解析path对象的 name
        例: path('index/',views.index,name='index')
            path('news/',views.news,name='news')
        在view 中
            def index(request):
                url = reverse('path对象名')   #返回 url  
                return redirect(url)
                
        path(name='index') 作用 路径不管怎么改都不影响 url 功能        
        
        -app_name =app名称
            定义在app文件夹下的urlconf模块中
            
        reverse('student:index')     student为 app_name; 多个app都可以有 name名为index 的path对象名
        
    2.模板系统
        html 源码写到模板文件中
        -模板路径设置
        项目目录下的settings.TEMPLATES
        BACKEND:模板引擎
        DIRS:模板路径  (一般模板放在项目根目录下.)
          DIRS: [os.path.join(BASE_DIR, 'templates')] #项目根目录下的templates目录
            
        在视图文件中
        from django.template.loader import get_template
        
        def index(request):
        #如果模板文件index.html 在项目根目录\templates\teacher\index.html
            tp = get_template('teacher/index.html') #直接写templates之后的路径/index.html,之前的 已经在setting中设置
            html = tp.render()  # 渲染 成 str字符串
            return HttpResponse(html)
        #return render(request,'teacher/index.html') 代替上的3句(快捷方式)   
    

    相关文章

      网友评论

          本文标题:2019-02-16 url 解析,重定向 ,和模板

          本文链接:https://www.haomeiwen.com/subject/cmjieqtx.html