内容回顾

1.装饰器

装饰器:是一个闭包函数,在不改变原函数的代码和调用方式的基础上,给原函数增加功能。

    def wrapper(func):
def inner(*args,**kwargs):
# 原函数执行之前
ret = func(*args,**kwargs)
# 原函数执行之后
return ret
return inner @wrapper # func1 = wrapper(func1)
def func1():
print('func1') 带参数的装饰器: def outer(flag):
def wrapper(func):
def inner(*args,**kwargs):
# 原函数执行之前
ret = func(*args,**kwargs)
# 原函数执行之后
return ret
return inner
return wrapper @outer(True) # outer(True) ——》 @wrapper func1 =wrapper(func1)
def func1():
print('func1') 多个装饰器装饰同一个函数 def w1(func):
def inner(*args,**kwargs):
# 原函数执行之前
ret = func(*args,**kwargs)
# 原函数执行之后
return ret
return inner def w2(func):
def inner(*args,**kwargs):
# 原函数执行之前
ret = func(*args,**kwargs)
# 原函数执行之后
return ret
return inner @w1 # func1=w1(func1) w1.inner
@w2 # func1 =w2(func1) w2.inner
def func1():
print('func1') ret = func1() # 原函数的返回值 装饰器的修复技术 from functools import wraps def wrapper(func):
@wraps(func)
def inner(*args,**kwargs):
# 原函数执行之前
ret = func(*args,**kwargs)
# 原函数执行之后
return ret
return inner 模板中自定义方法 1. 在app下创建一个叫templatetags的python包
2. 在包内创建python文件 *( my_tags.py)
3. 在python文件中写固定的内容: from django import template
register = template.Library() 1. 写函数 加装饰器 # filter
@register.filter
def x1(value,arg='xxx'):
return True # simple_tag
@register.simple_tag
def x2(*args,**kwargs):
return True @register.inclusion_tag('li.html')
def show_li(num):
return {'num':range(num)} 1. inclusion_tag写模板 <ul>
{% for foo in num %}
<li> {{ foo }}</li>
{% endfor %}
</ul> 使用: 在模板中使用: {% load my_tags %}
{{ 'alex'|x1:'very' }} # True 可以用在if判断中 {% x2 'a' k1='v1' %} {% show_li 3 %}
<ul>
<li> 0</li>
<li> 1</li>
<li> 2</li>
</ul> 今日内容 视图 1. FBV CBV FBV : function based view CBV : class based view 定义: from django.views import View class AddPublisher(View): def get(self,request): return response def post(self,request): return response 使用: url(r'^add_publisher/', views.AddPublisher.as_view()), 2. CBV的流程: 1. 程序运行的时候AddPublisher.as_view()执行,得到view函数
url(r'^add_publisher/', view),
2. 请求到来的时候,执行view函数:
1. 实例化AddPublisher ——》 self
2. self.request = request
3. 执行 self.dispatch(request, *args, **kwargs)
1. 判断请求方式是否被允许:
1. 如果允许:通过反射获得相应请求方式的方法 ——》handler
2. 如果不允许:self.http_method_not_allowed ——》handler
2. 执行handler ——》 返回响应 3. 加装饰器 1. FBV 直接加装饰器即可
2. CBV
from django.utils.decorators import method_decorator
# 1。加载某一个方法上
@method_decorator(timer)
def get(self, request): # 2. 加载dispatch方法上面
@method_decorator(timer)
def dispatch(self, request, *args, **kwargs): # 3. 加在类上
@method_decorator(timer, 'post')
@method_decorator(timer, 'get')
class AddPublisher(View): 4. 是否使用method_decorator的区别 func : <function AddPublisher.get at 0x00000000042CF158> args: (<app01.views.AddPublisher object at 0x000000000440E898>, <WSGIRequest: GET '/add_publisher/'>) func : <function method_decorator.<locals>.dec.<locals>.wrapper.<locals>.bound_func at args: 0x00000000045C71E0> (<WSGIRequest: GET '/add_publisher/'>,) 5. 上传文件 1. form表单指定编码方式enctype="multipart/form-data"
2. 从request.FILES中 文件对象
3. f1.chunks() # 大文件使用 6. requerst对象 print(request.method) # 请求方式 GET POST PUT
print(request.GET) # URL携带的参数 { ‘name’: ['alex'] } [] .get('name')
print(request.POST) # POST请求提交的数据 { ‘name’: ['alex'] } .getlist()
print(request.path_info) # 路径信息 不包含ip和端口 参数
print(request.FILES)
print(request.META)#请求头内容
print(request.COOKIES)
print(request.session) print(request.get_host())
print(request.get_full_path()) # 路径信息 不包含ip和端口 带参数
print(request.is_ajax()) # 判断是否是ajax请求 7. reponse对象 HttpResponse('字符串 ') ——》 页面展示 字符串 render(request,'html文件名', { k1:v1 }) ——》 返回一个完整HTML页面 redirect(’要跳转的地址‘) ——》重定向 Location : 地址 JsonResponse: from django.http import JsonResponse def json_data(request):
data = {'id': 11, 'name': 'alex'}
l1 = ['alex', 'peiqi'] return JsonResponse(l1, safe=False) # Content-Type: application/json 路由 分组 url(r'^blog/([0-9]{4})/([0-9]{2})/$', views.blog), django会把获取到的参数当做位置参数传递给视图函数 命名分组 url(r'^blog/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.blog), django会把获取到的参数当做关键字参数传递给视图函数 include from django.conf.urls import url, include
from django.contrib import admin
from app01 import views urlpatterns = [
url(r'^app01/', include('app01.urls')),
url(r'^app02/', include('app02.urls')),
]

day63 Pyhton 框架Django 06的更多相关文章

  1. pyhton框架Django之cookie和session

    一,cookie和session的理解 cookies 是浏览器为 Web 服务器存储的一小段信息. 每次浏览器从某个服务器请求页面时,它向服务器回送之前收到的cookies.它保存在浏览器下的某个文 ...

  2. day64 Pyhton 框架Django 07

    day67 内容回顾 视图 1. CBV 定义 from django.views import View class Addpub(View): def get(self,request): sel ...

  3. day62 Pyhton 框架Django 05

    内容回顾 1.变量 render(request,'模板文件名',{ k1:v1 }) {{ k1 }} {{ list.0 }} {{ dict.key }} {{ dict.keys }} {{ ...

  4. day61 Pyhton 框架Django 04

    内容回顾 1.django处理请求的流程: 1. 在浏览器的地址栏输入地址,回车发get请求: 2. wsgi模块接收请求: 3. 在urls.py文件中匹配地址,找到对应的函数: 4. 执行函数,返 ...

  5. day60 Pyhton 框架Django 03

    day61 内容回顾 1.安装 1. 命令行: pip install django==1.11.18 pip install django==1.11.18 -i 源 2. pycharm sett ...

  6. day58 Pyhton 框架Django 01

    内容回顾 python基础    网路编程    并发编程    数据库    前端     osi7层           tcp/ip 5层模型    应用层    表示层             ...

  7. python运维开发(十七)----jQuery续(示例)web框架django

    内容目录: jQuery示例 前端插件 web框架 Django框架 jQuery示例 dom事件绑定,dom绑定在form表单提交按钮地方都会绑定一个onclick事件,所有查看网站的人都能看到代码 ...

  8. Web框架——Django笔记

    Web框架--Django笔记 MVC和MTV MVC:Model.View.Controller MTV:Model.Template.View Django--MTV 1.创建Django程序   ...

  9. Python3.5学习十八 Python之Web框架 Django

    Python之Web框架: 本质:Socket 引用wsgiref创建web框架 根据web框架创建过程优化所得: 分目录管理 模板单独目录 执行不同函数单独存入一个方法py文件 Web框架的两种形式 ...

随机推荐

  1. ZK集群源码解读

    1.1. 集群模式 1.1.1.   数据同步总流程 1.1.1.1. OBSERVING 1.1.1.2. FOLLOWING 1.1.1.3. LEADING 1.1.2. 领导选举 1.1.2. ...

  2. Java中CAS 基本实现原理

    一.前言 了解CAS,首先要清楚JUC,那么什么是JUC呢?JUC就是java.util.concurrent包的简称.它有核心就是CAS与AQS.CAS是java.util.concurrent.a ...

  3. 反射之hasattr() getattr() setattr() 函数

    Python的hasattr() getattr() setattr() 函数使用方法详解 hasattr(object, name)判断object中有没有一个name字符串对应的方法或属性,返回B ...

  4. 第11课 - enum, sizeof, typedef 分析

    第11课 - enum, sizeof, typedef 分析 1. enum介绍 (1)enum是C语言中的一种自定义类型,和struct.union地位相同,格式如下: // enum每个值的最后 ...

  5. MySQL安装错误Couldn't find MySQL server

    Starting MySQL ERROR! Couldn't find MySQL server (/usr/local/mysql/bin/mysqld_safe) 昨天rpm安装MySQL5.7后 ...

  6. java键对值SHA256加密接口请求

    import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.htt ...

  7. java对象相等

    https://www.dutycode.com/post-140.html 简单来首,Object方法里的equals也是直接判断两个引用是否指向同一个地址,即引用同一个对象 public bool ...

  8. hystrix文档翻译之配置

    Hystrix使用Archaius作为配置的默认实现,下面介绍的是HystrixPropertiesStrategy的默认实现,你也可以通过插件方式重新实现. 每一个配置有四个级别: 全局默认 当下面 ...

  9. Win10使用VMWare15安装Ubuntu-18.04.2-desktop-amd64

    本文在Win10系统中使用VMWare Workstation Pro 15.1.0虚拟机安装Ubuntu-18.04.2-desktop-amd64.iso系统,同时安装VMWare Tools(实 ...

  10. ftp客户端自动同步 Windows系统简单操作ftp客户端自动同步

    服务器管理工具它是一款功能强大的服务器集成管理器,包含win系统和linux系统的批量连接,vnc客户端,ftp客户端等等实用功能.我们可以使用这款软件的ftp客户端定时上传下载的功能来进实现ftp客 ...