Django常用功能

静态文件

  • 将静态文件放到一个单独的目录中,以方便管理、
    - 静态文件可以放在项目根目录下,也可以放在应用的目录下
    - 由于有些静态文件在项目中是通用的,所以推荐放在项目的根目录下,方便管理
  • 在项目的setting文件中,通过STATICFILES_DIRS列表配置静态文件的加载路径
  • 在html页面调用静态文件时,需要指定静态文件所在的路径
  • 为了安全和方便维护,可以通过配置项达到隐藏真实静态文件路径的目的
    - 使用static标签,根据配置项动态生成静态文件路径(结合Nginx布署时,会将所有的静态文件都交给Nginx处理,而不用转到Django部分,所以这项配置就无效了,这个功能有些鸡肋!)
#反向解析加载静态图片路径
{% load staticfiles %}    
{% static 'images/01.jpg'%}

中间件

  • 概念:Django中的中间件是一个轻量级、底层的插件系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出;中间件的设计为开发者提供了一种无侵入式的开发方式,增强了Django框架的健壮性,其它的MVC框架也有这个功能,名称为IoC。
  • 使用场景:当某些操作在每次请求或响应时都会执行时,可以写在中间件中
  • 设计思想:面向切面编程/无侵害式编程
# 中间件方法(Django在中间件中预置了六个方法,这六个方法的区别在于不同的阶段执行,对输入或输出进行干预)
1.初始化:无需任何参数,服务器响应第一个请求的时候调用一次,用于确定是否启用当前中间件
def __init__():
    pass
2.处理请求前:在每个请求上调用,返回NoneHttpResponse对象
def process_request(request):
    pass
3.处理视图前:在每个请求上调用,返回NoneHttpResponse对象
def process_view(request, view_func, view_args, view_kwarge):
    pass
4.处理模板相应前:在每个请求上调用 ,返回实现了render方法的相应对象
def process_temlate_pesponse(request, response):
    pass
5.处理响应后:所有响应返回浏览器之前被调用,在每个请求上调用,返回HttpResponse对象
def process_response(request, response):
    pass
6.异常处理:当视图抛出异常时调用,在每个请求上调用,返回一个HttpResponse对象
def process_exception(request, exception)

# 自定义中间件
- 中间件是一个独立的python类,可以定义这六个方法中的一个或多个
- 在应用中新建middleware.py文件,在文件中定义类TestMiddleware
- 配置自定义中间件:应用.文件名.类名 == Book.middleware.TestMiddleware

#如果多个中间件中注册了相同的方法,则先注册的后执行

站点管理

  • 内容发布的部分由网站的管理员负责,包括查看、添加、修改、删除数据
  • Django项目中默认启用Admin管理站点:列表页选项, 编辑页选项, 重写模板
#准备工作
启用mysql数据库+定义AreaInfo模型类+创建管理员+注册模型类
再 重写模型__str__
# 控制站点管理页的展示
- 类ModelAdmin可以控制模型在Admin界面中的展示方式,主要包括在列表页的展示方式、添加修改页的展示方式
- 注册模型类前定义管理类AreaAdmin
class AreaAmin(admin.ModelAdmin):
    pass
- 管理类有两种使用方式
1.注册参数
admin.site.register(AreaInfo, AreaAdmin)
2.装饰器
@admin.register(AreaInfo)
class AreaAmin(admin.ModelAdmin):
    pass
列表页选项
  • 页大小
#设置每页展示的条数,默认每页显示100条
list_per_page = 100
  • 操作选项Action的位置:默认在管理页面的顶部有一个,管理页面底部没有
# 在头部增加一个
actions_on_top = True
# 在底部增加一个
actions_on_bottom = False
  • 列表中的列: 指定在模型列表中显示哪些字段作为列
# 指定展示的字段
list_display = [字段1, 字段2, ...]

 # 定义模型方法作为列
def title(self):
      return self.name
# 指定方法作为列的排序依据
title.admin_order_field = 'name'
  • 模型方法为列:模型方法和模型字段都指定为列显示在管理界面上
  • 列标题:默认为属性或方法的名称,可以通过属性设置为其他名称。设置方式
1.short_description 属性设置
            -  方法名.short_description = '列标题
2.verbose_name 属性设置
  • 右侧栏过滤器:只能接收字段,会将对应字段的值列出来,用于快速过滤,一般用于有重复值的字段
list_filter = ['字段1', '字段2', ...]
  • 搜索框:用于对指定字段的值进行搜索,支持模糊查询
search_fields = ['字段1', '字段2', ...]
编辑页选项
  • 字段顺序:根据列表顺序指定编辑界面字段顺序
fields = ['字段1', '字段2', ...]
  • 字段分组:字段分组fieldsets与字段顺序fields二选一使用
fieldsets = (
        ('组1标题', {'fields': ('字段1', '字段2')}),
        ('组2标题', {'fields': ['字段3', '字段4']}),
 )
  • 关联对象
在一对多的关系中,可以在一端的编辑页面中编辑多端的对象
    - 嵌入多端对象的方式包括表格、块两种
类型InlineModelAdmin:表示在模型的编辑页面嵌入关联模型的编辑
    - 子类StackedInline:以块的形式嵌入
    - 子类TabularInline:以表格的形式嵌入
在admin.py文件中,创建AreaStackedInline类,继承自admin.StackedInline
重写模板
  • 当我们需要修改站点管理页面的样式时,可以重写站点的模板
在templates 目录下创建 admin目录
再在admin文件下创建base_site.html

上传图片

  • 两种方式上传图片(上传后,将图片存储在项目静态文件中,然后将图片的路径存储在数据库表中)
    • 在站点管理页面中上传图片
    • 自定义form表单中上传图片
# 保存在static目录下,media表示多媒体文件目录,图片上传后保存的路径:static/media/Book
# 在settings中,配置图片上传后保存的目录
MEIA_ROOT=os.path.join(BASE_DIR, 'static/media')
# 后台站点上传图片
# 自定义表单上传图片
chunks() 保证数据安全

分页

  • Django提供了数据分页类,定义在django.core.paginator中
  • 对象Paginator是用来进行分页处理的,可以把一组数据按照每页n条进行分隔
  • 对象Page用于表示第m页的数据
#Paginator对象
方法init(列表,int):返回分页对象,参数为列表数据,每面数据的条数
方法page(m):返回Page对象,表示第m页的数据,下标以1开始
属性page_range:返回页码列表,从1开始,例如[1, 2, 3, 4]
属性count:返回对象总数
属性num_pages:返回页面总数
#Page对象
调用Paginator对象的page()方法返回Page对象,不需要手动构造
属性number:返回当前是第几页,从1开始
属性paginator:当前页对应的Paginator对象
方法has_next():如果有下一页返回True
方法has_previous():如果有上一页返回True
属性object_list:返回当前页对象的列表
方法len():返回当前页面对象的个数
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值