静态资源:

在settings.py中最底下有一个叫做static的文件夹,主要用来加载一些模板中用到的资源,提供给全局使用

这个静态文件主要用来配置CSS,HTML,图片,字体文件等   

STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR,'static')
]
之后在模板中,首先加载静态文件,之后调用静态,就不用写绝对全路径了

模板中的声明
{% load static %} 或 {% load staticfiles %}

在引用资源的时候使用
{% static 'xxx' %}   xxx 就是相对于staticfiles_dirs的一个位置

中间件:

是一个轻量级的,底层的插件,可以介入Django的请求和相应过程(面向切面编程)

中间件的本质就是一个python类

面向切面编程(Aspect Oriented Programming)简称AOP。AOP的主要实现目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合的隔离效果。

中间件方法:

__init__:没有参数,服务器响应第一个请求的时候自动调用,用户确定是否启用该中间件
process_request(self,request):在执行视图前被调用,每个请求上都会调用,不主动进行返回或返回HttpResponse对象
process_view(self,request,view_func,view_args,view_kwargs):调用视图之前执行,每个请求都会调用,不主动进行返回或返回HttpResponse对象
process_template_response(self,request,response):在视图刚好执行完后进行调用,每个请求都会调用,不主动进行返回或返回HttpResponse对象
process_response(self,request,response):所有响应返回浏览器之前调用,每个请求都会调用,不主动进行返回或返回HttpResponse对象

process_exception(self,request,exception):当视图抛出异常时调用,不主动进行返回或返回HttpResponse对象

 

自定义中间件:

流程:
1. 在工程目录下创建middleware目录
2. 目录中创建一个python文件
3. 在python文件中导入中间件的基类
    from django.utils.deprecation import MiddlewareMixin
4. 在类中根据功能需求,创建切入需求类,重写切入点方法
    class LearnAOP(MiddlewareMixin):
        def process_request(self,request):
            print('request的路径',request.GET.path)
5. 启用中间件,在settings中进行配置,MIDDLEWARE中添加
    middleware.文件名.类名

 

文件上传:

文件数据存储在request.FILES属性中

form表单上传文件需要添加enctype='multipart/form-data'
文件上传必须使用POST请求方式
存储
    在static文件夹下创建uploadefiles用与存储接收上传的文件
    在settings中配置,MEDIA_ROOT=os.path.join(BASE_DIR,r'static/uploadefiles')
在开发中通常是存储的时候,我们要存储到关联用户的表中

  1 <form method='post' action='xxx' enctype='multipart/form-data'>
  2 	{% csrf_token %}
  3 	<input type='file' name='icon'>
  4 	<input type='submit'  value='上传'>
  5 <form>
  6 
  7 def savefIcon(request):
  8 	if request.method == 'POST'
  9 		f = request.FILES['icon']
 10 		filePath = os.path.join(settings.MEDIA_ROOT,f.name)
 11 		with open(filePath,'wb) as fp:
 12 			for part in f.chunks():
 13 				fp.write(part)
上传示例:

 

分页工具:

django提供了分页的工具,在django.core中   
    Paginator:数据分页工具
    Page:具体的某一页面

Paginator:

对象创建:Paginator(数据集,每一页数据数)

属性:
        count对象总数
        num_pages:页面总数
        page_range: 页码列表,从1开始

方法:page(整数);获得一个page对象

常见错误:   
    InvalidPage:page()传递无效页码
    PageNotAnInteger:page()传递的不是整数
    Empty:page()传递的值有效,但是没有数据

 

Page:

通过Paginator的page()方法获得

属性:
    object_list:当前页面上所有的数据对象
    number:当前页的页码值
    paginator:当前page关联的Paginator对象

方法:
    has_next():判断是否有下一页
    has_previous():判断是否有上一页
    has_other_pages():判断是否有上一页或下一页
    next_page_number():返回下一页的页码
    previous_page_number():返回上一页的页码   
    len():返回当前页的数据的个数

posted on 2019-11-22 15:31  雨淋一号  阅读(136)  评论(0编辑  收藏  举报