• Django(二)


    静态资源:

    在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():返回当前页的数据的个数

  • 相关阅读:
    【LeetCode】96.Unique Binary Search Trees
    【LeetCode】136.Single Number
    VirtualBox下Linux加载Windows的共享目录
    Macbook上Windows的触摸板设置工具
    [转]太岁三煞五黄
    [转]UI、GUI、UE、UX、ID、UED、UCD的区别
    紫微斗数:命主和身主
    [转]如何降低二手烟的危害
    [转]从第六十三卦到第六十四卦
    Mac显示和隐藏隐藏文件
  • 原文地址:https://www.cnblogs.com/yulincoco/p/11911830.html
Copyright © 2020-2023  润新知