Django知识回顾

什么是Django

django是一个开源的重量级的web框架,由python写成。

MVC和MVT的区别

mvc(django遵循mvc的设计模式)

M全拼为Model,主要封装对数据库层的访问,对数据库中的数据进行增、删、改、查操作。
V全拼为View,用于封装结果,生成页面展示的html内容。
C全拼为Controller,用于接收请求,处理业务逻辑,与Model和View交互,返回结果。

mvt

M全拼为Model,与MVC中的M功能相同,负责和数据库交互,进行数据处理。
V全拼为View,与MVC中的C功能相同,接收请求,进行业务处理,返回应答。
T全拼为Template,与MVC中的V功能相同,负责封装构造要返回的html。

Django的请求生命周期

1 浏览器发送请求给wsgi(socket服务端),wsgi接收到请求并将请求进行初次封装,然后将请求交给web框架(flask、Django)
2 框架(flask、Django)对wsgi封装好的请求再次封装成request
3 中间件对请求进行校验或者在请求对象中添加其他相关数据,例如csrf、request.session
4 url路由匹配,寻找对应的视图函数
5 视图函数对请求进行业务处理(增删改查)
6 中间件对响应的数据进行处理
7 wsgi将返回的数据发送给服务器

FBV和CBV

基于函数的视图叫做FBV,基于类的视图叫做CBV
在python中使用CBV的优点:
1 提高了代码的复用性、可以使用面向对象技术
2 可以用不同的函数针对不同的http方法处理,而不是通过if语句

ORM

ORM,是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换 。从效果上说,它其实是创建了一个可在编程语言里使用的–“虚拟对象数据库”
优点:操作简单,功能齐全,不用再使用复杂的sql语句。缺点:速度慢
映射关系(一对一、一对多、多对多):

ORM DB
对象 数据行
属性 字段

在django使用ORM:
1 手动创建数据库
2 在配置文件(settings.py)中配置数据库的连接信息(host、端口、账号密码、数据库名称等等)
3 在项目的__init__.py中导入MySQL驱动
import pymysql
pymysql.install_as_MySQLdb()
4 在应用中的models.py中定义类
from django.db import models

#定义图书模型类BookInfo

class BookInfo(models.Model):
    btitle = models.CharField(max_length=20, verbose_name='名称')
    bpub_date = models.DateField(verbose_name='发布日期')
    bread = models.IntegerField(default=0, verbose_name='阅读量')
    bcomment = models.IntegerField(default=0, verbose_name='评论量')
    is_delete = models.BooleanField(default=False, verbose_name='逻辑删除')

    class Meta:
        db_table = 'tb_books'  # 指明数据库表名
        verbose_name = '图书'  # 在admin站点中显示的名称
        verbose_name_plural = verbose_name  # 显示的复数名称

    def __str__(self):
        """定义每个数据对象的显示信息"""
        return self.btitle

5 数据迁移
生成迁移文件:python manage.py makemigrations
同步到数据库中:python manage.py migrate
6 批量插入数据

insert into tb_books(btitle,bpub_date,bread,bcomment,is_delete) values
('射雕英雄传','1980-5-1',12,34,0),
('天龙八部','1986-7-24',36,40,0),
('笑傲江湖','1995-12-24',20,80,0),
('雪山飞狐','1987-11-11',58,24,0);

Django中写原生sql语句

1 使用extra

m`odels.Book.objects.extra(select={'count': 'select count(*) from hello_Book'})`

2 使用raw

Book.objects.raw('select * from hello_Book')  # 返回模型实例

3 自定义sql

from django.db import connection

cursor=connection.cursor()

# 插入操作
cursor.execute("insert into hello_author(name) values('钱钟书')")

# 更新操作
cursor.execute("update hello_author set name='abc' where name='bcd'")

# 删除操作
cursor.execute("delete from hello_author where name='abc'")

# 查询操作
cursor.execute("select * from hello_author")

raw=cursor.fetchone()  # 返回结果行游标直读向前,读取一条
cursor.fetchall()  # 读取所有

什么是中间件、中间件的作用

Django中的中间件是一个轻量级、底层的插件系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出。中间件的设计为开发者提供了一种无侵入式的开发方式,增强了Django框架的健壮性。
我们可以使用中间件,在Django处理视图的不同阶段对输入或输出进行干预。
1 定义一个中间件工厂函数,然后返回一个可以调用的中间件。
中间件工厂函数需要接收一个可以调用的get_response对象。
返回的中间件也是一个可以被调用的对象,并且像视图一样需要接收一个request对象参数,返回一个response对象。

def simple_middleware(get_response):
    # 此处编写的代码仅在Django第一次配置和初始化的时候执行一次。
    def middleware(request):
        # 此处编写的代码会在每个请求处理视图前被调用。
        response = get_response(request)
        # 此处编写的代码会在每个请求处理视图之后被调用。
        return response

    return middleware

定义好的中间件需要在setting.py中注册添加

    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    # 'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'users.middleware.my_middleware',  # 添加中间件
]

2 多个中间件的执行顺序
在请求视图被处理前,中间件由上至下依次执行
在请求视图被处理后,中间件由下至上依次执行
Django知识回顾_第1张图片

你可能感兴趣的:(python-web)