• django url分发,视图,模板回顾


    Django基础轮廓
      MTV+controller

    一 url分发系统:
      1 简单使用

    url(r'^articles/2003/$', views.special_case_2003),  # special_case_2003(request)
    url(r'^articles/(d{4})/$', views.year_archive),  # year_archive(request,1999)
    url(r'^articles/(d{4})/(d+)$', views.month_archive),  # month_archive(request,1999,12)

      2 有名分组

    url(r'^articles/(?P<y>d{4})/(?P<m>d+)$', views.month_archive2), 
    # month_archive(request,y=1999,m=12)

      3 分发include

    url('app/', include('app.urls')),


      4 反向解析

    (1)在模板:     {% url '别名' %}
    (2)在py文件中:   _url=reverse("index")

    二、视图函数

      浏览器  ----------  服务器
                  '''
                   请求首行
                   请求头
                   空格
                   请求体(post) # user=yuan&pwd=123
    
                  '''              

      1、请求对象request

     # request;请求信息对象
            print(request.method)
            print(request.path)
            print(request.GET)  
            print(request.POST) # {"user":"yuan","pwd":123}
            print(request.body) # 请求体原生数据   " user=yuan&pwd=123"
            print(request.META)
            print(request.get_full_path()) #路径+请求数据
             print(request.is_ajax())

      

      2、响应对象    

    1 Httpresponse("OK")
    2 render(request,"index.html")  
         (1) 找文件,读文件
         (2) 渲染文件:将模板文件中的所有{{}},{%%}替换成标签 
    3 重定向 redirect
        (1)浏览器发送一个post请求;
        (2)请求通过了,服务器发送一个301或者302状态码和location:新路径给浏览器;
        (3)接收到301或者302状态码,解读响应体中的location的值,携带此路径再一次访问服务器;
        (4)服务器再一次接受到路径,将路径对应的数据打包好,传送给浏览器渲染。

    三、模板语法

      1 渲染变量  {{val}}

    (1) 深度查询 {{val.}}
    (2) 过滤器  {{val|filter_name:参数}}
                   {{now|date:"Y-m-d"}}
                         
          常用过滤器: add  date default lenth slice  safe filesizeformat   

      2 渲染标签  {%%} 

    {%for i in val%}
    {%endfor%}       
                       
    {%if %}
    {%endif%}
                      
    {%csrftoken%}        

      3、自定义标签和过滤器

    1、在settings中的INSTALLED_APPS配置当前app;
    2、在app中创建templatetags模块;
    3、创建任意 .py 文件,如:my_tags.py;
    4、编写代码
    from django import template
    from django.utils.safestring import mark_safe
     
    register = template.Library()   #register的名字是固定的,不可改变
     
     
    @register.filter
    def filter_multi(v1,v2):
        return  v1 * v2
    
    
    @register.simple_tag
    def simple_tag_multi(v1,v2):
        return  v1 * v2
    乘法标签和过滤器

     5、使用的时候导入自定义模板和标签文件

      {% load 文件名 %} 

     6、使用simple_tag和filter(如何调用)

      {{num|filter_multi:2 }} #24 其中num=12

      4、模板继承

    1、创建母版base.html;
    2、base.html中在设置
    {% block content %}
         设置盒子
    
    {% endblock %}

     3、子.html文件中

    {% extends "base.html" %} //继承母板结构
    
    {% block content %}
         此处写自己的html代码
        
    {% endblock %}

       5 自定义模板升级 inclusion_tag 

    rbacmenu.py (模板文件)


    from
    django import template register = template.Library() # register的名字是固定的,不可改变 @register.inclusion_tag('rbac/menu.html') #指定传递给传递给 rbac/menu.html文件 def get_menu(request): # 权限侧边栏 permission_list = request.session['permissions_list'] per_list = [] for permission in permission_list: if permission.get('type') == "menu": per_list.append(permission) return {"per_list":per_list}

    rbac/menu.html 代码

    {% for permission in per_list %}
        <div><a href="{{ permission.url}}">{{ permission.title }}</a></div>
    {% endfor %}

    调用方法

            <div class="left-menu">
    
                 {% block side_bar %}
                    {% load rbacmenu %}
                    {% get_menu request %}  //此处调用,并传递参数request
    
                 {% endblock side_bar %}
            </div>

  • 相关阅读:
    简单的生成编号的存储过程
    表实体上面添加特性获取到连接字符串
    Spring 静态注入讲解(MethodInvokingFactoryBean)
    嵌套的SQL另外一种写法
    微信小程序之列表下拉加载更多
    微信小程序之--->轮播图制作
    javascript变量作用域
    struts2升级报ActionContextCleanUp<<is deprecated。Please use the new filters
    java日期加减
    数字转大写
  • 原文地址:https://www.cnblogs.com/angle6-liu/p/10209099.html
Copyright © 2020-2023  润新知