Django之拾遗

一、设计模式

1.1 MVC

  • 模型(M)是数据的表述,非真正数据,而是数据接口。

  • 视图(V)是你看到的界面,是模型的表现层,此外还提供了收集用户输入的接口。

  • 控制器(C)控制模型和视图之间的信息流动。通过程序逻辑从数据库信息,传送信息给视图。还通过视图从用户处收集信息,变更视图、通过模型修改数据。

1.2 MTV(Django)

  • M 表示“模型”,数据访问层,包含所有与数据相关的功能:访问数据的方式、验证数据的方式、数据的行为、数据之间的关系。

  • T 表示“模板”,表现层。包含表现相关的决策:在网页或其他文档类型中如何显示某个东西。

  • V 表示“视图”,业务逻辑层。包含访问模型和选择合适模板的逻辑:模型和模板之间的桥梁。

     

二、在Python脚本中调用Django环境

import os
if __name__ == '__main__':
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "untitled15.settings")
    import django
    django.setup()

# 测试代码

三、Django终端打印SQL语句

# settings中配置
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console':{
            'level':'DEBUG',
            'class':'logging.StreamHandler',
        },
    },
    'loggers': {
        'django.db.backends': {
            'handlers': ['console'],
            'propagate': True,
            'level':'DEBUG',
        },
    }
}

四、Django请求生命周期

五、Django2.x版本与1.x版本的区别

  django2.x的re_path和1.x的url一样

path基本规则

  • 使用尖括号(<>)从url中捕获值。
  • 捕获值中可以包含一个转化器类型(converter type),比如使用 <int:name> 捕获一个整数变量。若果没有转化器,将匹配任何字符串,当然也包括了 / 字符。
  • 无需添加前导斜杠。

path转化器

Django默认支持以下5个转化器:

  • str,匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式
  • int,匹配正整数,包含0。
  • slug,匹配字母、数字以及横杠、下划线组成的字符串。
  • uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。
  • path,匹配任何非空字符串,包含了路径分隔符(/)(不能用?)

注册自定义转化器

  对于一些复杂或者复用的需要,可以定义自己的转化器。转化器是一个类或接口,它的要求有三点:

  • regex 类属性,字符串类型
  • to_python(self, value) 方法,value是由类属性 regex 所匹配到的字符串,返回具体的Python变量值,以供Django传递到对应的视图函数中。
  • to_url(self, value) 方法,和 to_python 相反,value是一个具体的Python变量值,返回其字符串,通常用于url反向引用。

栗子:

class FourDigitYearConverter:  
    regex = '[0-9]{4}'  
    def to_python(self, value):  
        return int(value)  
    def to_url(self, value):  
        return '%04d' % value  

  使用register_converter 将其注册到URL配置中:

from django.urls import register_converter, path  
from . import converters, views  
register_converter(converters.FourDigitYearConverter, 'yyyy')  
urlpatterns = [  
    path('articles/2003/', views.special_case_2003),  
    path('articles/<yyyy:year>/', views.year_archive),  
    ...  
] 

六、简单文件上传

前端需要注意的点

1.method需要指定成post
2.enctype需要改为formdata格式

后端暂时需要注意的是

1.配置文件中注释掉csrfmiddleware中间件
2.通过request.FILES获取用户上传的post文件数据

print(request.FILES)
print(type(request.FILES.get('file_name')))

file_name=request.FILES.get('file_name').name
from django.core.files.uploadedfile import InMemoryUploadedFile
with open(file_name,'wb')as f:
    for i in request.FILES.get('file_name').chunks():
        f.write(i)    

七、choice

  在模型表中定义:choice = ((0,'女'),(1,'男'),(2,'未知'))

  在字段上使用:gender = models.IntegerField(choices = choice)

  在视图层取对应的文字:gender = author.get_gender_display()

猜你喜欢

转载自www.cnblogs.com/moonzier/p/11221572.html