django的相关小记录

本文是对Django知识的记录与复习,介绍了请求在Django中的处理流程,包括客户端、wsgi、中间件等环节。还阐述了Django对高并发的处理方法,如配置NGINX和Apache;安全应对策略,如添加CSRF验证。此外,提及了MTV模式、内置组件及缓存设置等内容。

以下内容能够在百度的时候做更详细的查看,我在这里只是对自己的知识作个简单的记录和复习。

如果不熟悉django的,请去django的基础教程里面做查看,当然我这里没有基础教程。

 

一、访问流程

    对于一个请求程序在django的处理流程

    客户端(浏览器)-->wsgi-->中间件-->路由视图-->model/orm-->response-->中间件-->wsgi-->客户端(浏览器)

 

二、相关流程概述和功能描述

1、客户端

   即浏览器,不做过多解释

2、wsgi

    wsgi是将python服务器程序连接到web服务器的通用协议。需要结合看一下uwsgi。

3、中间件

 在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法。位置在settings.py的MIDDLEWARE_CLASSES 变量

意思就是django在处理相关请求的时候,处理开始前和处理结束后都回去中间件那里执行以下中间件。做状态查看和异常结果反馈。

 

4、路由视图

urls.py 和views.py,不做解释

 

5、models/orm

数据库的处理和相关操作,django有自己直接对接数据库的方法

以下是查询,插入方法知道的就一种,不多说了

 

#<1> all():                  查询所有结果 
    #<2> filter(**kwargs):       它包含了与所给筛选条件相匹配的对象。获取不到返回None
    #<3> get(**kwargs):          返回与所给筛选条件相匹配的对象,返回结果有且只有一个。获取不到会
    抱胸
    #如果符合筛选条件的对象超过一个或者没有都会抛出错误。
    #<4> exclude(**kwargs):      它包含了与所给筛选条件不匹配的对象
    #<5> order_by(*field):       对查询结果排序
    #<6> reverse():              对查询结果反向排序 
    #<8> count():                返回数据库中匹配查询(QuerySet)的对象数量。 
    #<9> first():                返回第一条记录 
    #<10> last():                返回最后一条记录 
    #<11> exists():              如果QuerySet包含数据,就返回True,否则返回False
    #<12> values(*field):        返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一
    系model的实例化对象,而是一个可迭代的字典序列
    #<13> values_list(*field):   它与values()非常相似,它返回的是一个元组序列,values返回的是一个
    字典序列
    #<14> distinct():            从返回结果中剔除重复纪录

 

三、django对高并发的方法

    1、直接配置NGINX,具体配置方法百度就好了

    2、配置Apache,具体方法麻烦也百度了

   3、优劣说明,低并发Apache比NGINX好,高并发NGINX完虐Apache,所以直接配置NGINX。

 

四、django的安全应对方法

  1、在form表单中添加{csrf_token},django在给浏览器cookie的时候,会生成一个CSRF_token值,表单的提交的时候加上{csrf_token},会携带这个值,去做验证。

2、就是一些其他的了,如敏感操作,重要数据和钱财交易,要做确认的。

五、django是MTV模式

models数据库、templates模板、views业务逻辑视图处理

六、django内置组件

1、admin.py,后台配置管理

2、models.py,负责业务对象与数据库的对象(ORM)

3、forms.py,1.生成HTML代码2.数据有效性校验3校验信息返回并展示

4、分页器,这个看使用场合,通俗点就是查询数据库指定序列的内容数据,上一页,下一页的。

5、用户认证,django有自带的一个表,user_auth,通过方法可直接验证用户登录和密码修改,不过也要看使用场合,这个功能较为单一,不易扩展。看情况使用。

6、cookie和session,emmmm,不说。

 

七、django缓存

django有自带的缓存,记得要在settings.py里面进行设置

1、数据库缓存

2、内存缓存

3、磁盘缓存

4、redis缓存。

缓存后面再做详细记录

 

  

 

 

 

 

 

### Django 获取数据库记录数的方法 在 Django 中,可以通过查询集(QuerySet)的 `count()` 方法来获取数据库中记录的数量。`count()` 方法会返回与查询条件匹配的记录总数,并且它直接在数据库层面执行 `COUNT` 查询,性能较高[^1]。 以下是一个示例代码,展示如何在 Django 中获取数据库记录的数量: ```python from myapp.models import Stu # 获取 stu 表中所有记录的数量 total_records = Stu.objects.all().count() print(f"总记录数: {total_records}") # 获取特定条件下的记录数量 filtered_records = Stu.objects.filter(id__gt=1).count() print(f"ID大于1的记录数: {filtered_records}") ``` 在上述代码中: - `Stu.objects.all().count()` 用于获取 `stu` 表中所有记录的数量。 - `Stu.objects.filter(id__gt=1).count()` 用于获取满足条件 `id > 1` 的记录数量[^4]。 需要注意的是,如果使用 `len(Stu.objects.all())` 来获取记录数量,Django 会先将所有记录加载到内存中再计算长度,这可能会导致性能问题,尤其是当数据量较大时。因此,推荐使用 `count()` 方法[^2]。 此外,在定义模型时,确保模型类正确配置了 `Meta` 选项中的 `db_table` 和 `app_label` 属性,以避免运行时错误[^3]。 ### 注意事项 - 如果数据库字段类型与代码中的类型不匹配,可能会引发类似 `TypeError` 的错误。例如,字段类型为字符串但传入整数会导致类型不匹配的问题。 - 确保模型类所在的 App 已经正确激活,否则可能会出现 `RuntimeError` 错误,提示模型未声明明确的 `app_label`。 ```python class Stu(models.Model): name = models.CharField(max_length=100) age = models.IntegerField() class Meta: db_table = "stu" app_label = 'myapp' ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值