栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

django学习笔记04

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

django学习笔记04

CBV源码剖析

#不要修改源码,出了bug很难找

#突破口在urls.py
    path('login/', views.MyLogin.as_view()),
    #与path('login/',views.view)    FBV一模一样
    #CBV与FBV在路由匹配上本质是一样的,都是路由对应函数内存地址
    
    
    函数名、方法名 加括号执行优先级最高
猜测:
    as_view()
        要么是被@staicmethod修饰的静态方法
        要么是被@classmethod修饰的类方法     正确
         @classonlymethod
        def as_view(cls, **initkwargs):

'''
@classonlymethod
    def as_view(cls, **initkwargs):
        """Main entry point for a request-response process."""
        
        def view(request, *args, **kwargs):
            self = cls(**initkwargs)
         
            return self.dispatch(request, *args, **kwargs)
      
        return view
        
        

    def dispatch(self, request, *args, **kwargs):
    
        if request.method.lower() in self.http_method_names:
            handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
        else:
            handler = self.http_method_not_allowed
        return handler(request, *args, **kwargs)
        
        
        #getattr反射
'''

模板语法传值

{{}}:变量相关

{%%}:逻辑相关

def index(request):
    #模板语法可以传递的的后端python数据类型
    n = 123
    f = 123.345
    s = '你是水哥'
    b = True
    l = ['哈哈','学习','得到','看看']
    t = (11,222,333,444)
    d = {'username':'lz','password':123,'age':18,'gender':'male'}
    se = {'应用','天天','匹配'}

    def func():
        print('快快快')
        return '很好的'
    class MyClass(object):
        def get_self(self):
            return 'self'
        @staticmethod
        def get_func():
            return 'func'
        @classmethod
        def get_class(cls):
            return 'cls'
        #对象被展示到html页面上,就类似于执行了打印操作也会触发__str__方法
        def __str__(self):
            return '哈哈哈'

    obj = MyClass()


    # return render(request,'index.html',{})   #一个个传
    return render(request,'index.html',locals())


{{ n }}

{{ f }}

{{ s }}

{{ b }}

{{ l }}

{{ d }}

{{ t }}

{{ se }}

{{ func }}

{{ MyClass }}

{{ obj }}

{{ obj.get_self }}

{{ obj.get_func }}

{{ obj.get_class }}

#django模板语法的取值,是固定的格式,只能采用’句点符‘ .

{{d.username}}

{{l.0}}

{{d.info.2.hobby}}

#既可以点键也可以点索引,还可以两者混用在这里插入代码片

过滤器

#过滤器类似于模板语法内置的,内置方法
#基本语法
{{数据|过滤器:参数}}

#转义
#前端
|safe
#后端
    from django.utils.safestring import mark_safe
    res = mark_safe('信心')
    
#前端代码不一定要在前端写,也可以在后端写传递到前端在这里插入代码片

标签

#for循环
{% for foo in l %}   #foo随便起的别名

{{forloop}}

{{foo}}

{% endfor %} {'parentloop': {}, 'counter0': 0, 'counter': 1, 'revcounter': 4, 'revcounter0': 3, 'first': True, 'last': False}

模板继承

#很多网站页面整体都差不多,只是某一些局部在做变化

#模板的继承,你自己先选好一个想要继承的模板页面
{% extends 'home.html' %}

#继承之后子页面和模板页面一模一样,你需要在模板页面上提前划定可以被修改的区域
{% block content %}
模板内容
{% endblock %}

#子页面就可以声明想要修改那块划定的区域
{% block content %}
子页面内容
{% endblock %}


#一般情况下模板页面上应该至少有三块可以被修改的区域
	1、css区域
    2、html区域
    3、js区域
    {% block css %}
    
    {% endblock %}
    
    {% block content %}
    
    {% endblock %}
    
    {% block js %}
    
    {% endblock %}
#每一个子页面就都有了自己独有的css代码,html代码,js代码
'''
一般情况下,模板的页面上划定的区域越多,那么该模板的扩展性越强
'''

模板导入

'''
将页面的某一个局部当做模块的形式
那个地方需要就直接导入使用即可
'''
{% include 'hh.html' %}

注意:当在django项目中创建了templates项目,然后在里面的所有html代码引入的样式无法显示,可以在引入css和js时候,在目录前面加上’ /',或者写入

            {% load static %}
    
    

提示找不到样式那肯定是引入路径错误。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/938387.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号