美文网首页
Django高级使用

Django高级使用

作者: 铅笔与旧友 | 来源:发表于2018-09-20 21:23 被阅读0次

一、静态文件

  • 配置settings.py
STATIC_URL='/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
]
  • 使用
#加载静态文件
{% load static %}

#链接到静态文件
<img src="{% static 'elema/img/1.jpeg' %}">

二、中间件

  • 应用场景
本质: 就是一个python类
应用场景: 统计、黑名单、白名单、反爬...
  • 中间件方法
- __init__
    不需要传参,服务器响应第一个请求的时,会自动调用,用于确定是否启用中间件 
- process_request(self,request)
    在视图执行前调用(即分配url匹配视图之前),每个请求都会调用,返回None或HttpResponse对象
- process_view(self,request,view_func,view_args,view_kwargs)
    调用视图之前执行,每个请求都会调用,返回None或HttpResponse对象
- process_templae_response(self,request,response)
    在视图刚好执行完后调用,每个请求都会调用,返回None或HttpResponse对象
- process_response(self,request,response)
    所有响应返回浏览器之前调用,每个请求都会调用,返回None或HttpResponse对象 
- process_exception(self,request,exception)
    当视图出现异常时调用,返回HttpResponse对象

备注: 为什么会返回HttpRespons对象?因为在请求进来后如果有问题,就可以不做后续处理,直接给客户端响应。

  • 方法执行顺序


    https://img.haomeiwen.com/i1801379/824ff49a45e847bf.png
  • 自定义中间件并使用
在工程目录下middleware目录下创建应用目录 
- 在middleware/elema中创建一个elemamiddleware.py 
from django.utils.deprecation import MiddlewareMixin 
class MyMiddle(MiddlewareMixin): 
    # 在视图执行前调用 
    def process_request(self,reqeust):
        print('get请求,参数name: ', reqeust.GET.get('name')) 
- 配置settings.py文件(即在MIDDLEWARE中添加上述文件的位置) 
    'middleware.elema.elemamiddleware.MyMiddle'
  • 中间件(黑名单拦截)
# 拦截器,拦截他黑名单中的IP 
class MyMiddle(MiddlewareMixin): 
    def process_request(self, request): 
        if request.META['REMOTE_ADDR'] in getattr(settings, 'BLOCKED_IPS', []): 
        return HttpResponse('<h1>Forbidden</h1>') 
# settings.py中 
BLOCKED_IPS = [ # IP黑名单 '192.168.0.100' ]
  • 中间件(未登陆处理)
class MyMiddle(MiddlewareMixin): 
    def process_request(self, request): 
        # request.META['REMOTE_ADDR'] 请求的IP地址 
        if request.path !='/meituan/login/': # 检测如果不是登录的话 
            if "username" in request.COOKIES: # 已经登录不做任何处理 
                pass 
            else: # 未登录,重定向到登录页面 
            return HttpResponseRedirect('/meituan/login/')

三、文件上传

  • 注意
- 文件上传时,文件数据存储在request.FILES属性中
- form表单要上传文件需要加 enctype="multipart/form-data"
- 上传文件必须是post请求
  • 存储路径
- 在static目录下创建upfile目录用于存储接受上传的文件
- 配置settings.py文件
    MDEIA_ROOT = os.path.join(BASE_DIR,'static/upfile')
  • 文件内容
# 获取表单上传的文件内容
file = request.FILES['file']

#设置上传文件的保存路径
filePath = os.path.join(settings.MDEIA_ROOT,file.name)

#文件写入后台
with open(filepath,'wb') as fp:

四、分页

  • Paginator(列表,每页个数)
#属性
- .count:对象总页数
- .num_pages: 页面总数
- .page_range: 页码列表(页码从1开始)
  • page(num):是Paginator的方法
#属性
-   .object_list:当前页面上所有的数据(对象)列表
-   .number:当前页的页码值
-   .paginator:当前page对象关联的paginator对象

#方法  
-   .has_next():判断是否有下一页,如果有返回Ture
-   .has_previous:判断是否有上一页,如果有返回Ture
-   .has_other_pages():判断是否有上一页或下一页,如果有返回Ture
-   .next_page_number(): 返回下一页的页码,如果下一页不存在抛出InvalidPage异常
-   .previous_page_number(): 返回上一页的页码,如果上一页不存在抛出InvalidPage异常
-   .len():返回当前页数据的个数
  • 实例
# 所有商品数据
    alllist = Goods.objects.all()
#切片处理
    alllist = Goods.objects.all()[0:5]

# 12条数据为一页,划分总页数
# 分页对象
    paginator = Paginator(list(alllist),12)

# 根据传入的页码得到Page对象
    pageobj = paginator.page(page)

# 当前页的所有数据列表(遍历获取)
 pageodj_list = pageobj.object_list
 for goods in pageobj_list

相关文章

  • Django高级使用

    一、静态文件 配置settings.py 使用 二、中间件 应用场景 中间件方法 备注: 为什么会返回HttpRe...

  • django教程--model教程之查询高级用法

    django教程--model教程之查询高级用法 上节教程我们了解了Django中model的基本使用,本节我们接...

  • 07-Django高级使用

    一、静态文件 简述 配置settings.py 示例 在项目文件中创建static,并创建对应的应用目录,在应用目...

  • 07-Django高级使用

    一、静态文件 简述 配置settings.py 示例 在项目文件中创建static,并创建对应的应用目录,在应用目...

  • 07-Django高级使用

    一、静态文件 简述 配置settings.py 示例 在项目文件中创建static,并创建对应的应用目录,在应用目...

  • 07-Django高级使用

    一、静态文件 简述 配置settings.py 示例 在项目文件中创建static,并创建对应的应用目录,在应用目...

  • Django入门与实践

    Django 简介 Django基于python的高级web开发框架。Django遵守BSD版权,初次发布于200...

  • 2.Django根据已有数据,使用python脚本文件将数据导入

    Django导入初始数据 独立使用Django的Model模板 Django根据已有数据,使用python脚本文件...

  • Django 入门

    Django 2.x Python 3.x Django是基于python的高级web框架,高度集成,可以高效快速...

  • 2018-07-26 Django入门教程

    今天主要学习了Django框架的使用。 使用django-admin创建项目,如django-admin st...

网友评论

      本文标题:Django高级使用

      本文链接:https://www.haomeiwen.com/subject/srconftx.html