python django有什么功能

567次阅读
没有评论

python

静态文件

·将静态文件放到一个单独的目录中,以方便管理

– 静态文件可以放在项目根目录下,也可以放在应用的目录下

– 由于有些静态文件在项目中是通用的,所以推荐放在项目的根目录下,方便管理

·在项目的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.处理请求前:在每个请求上调用,返回None或HttpResponse对象
def process_request(request):
    pass
3.处理视图前:在每个请求上调用,返回None或HttpResponse对象
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():返回当前页面对象的个数
神龙|纯净稳定代理IP免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试

相关文章:

版权声明:wuyou2021-06-27发表,共计3640字。
新手QQ群:570568346,欢迎进群讨论 Python51学习