Django高级使用

一、静态文件

  • 配置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://upload-images.jianshu.io/upload_images/1801379-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
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容