1,装饰器:在不改变原函数的调用方式情况下为原函数增加一些功能(遵循开放封闭的原则)
def outter(fn):
def inner(*args, **kwargs):
# 可以在执行函数前执行一些代码
ret = fn(*args, **kwargs)
# 可以在被装饰函数之后的操作代码
return ret
return inner
@outter
def func(tools):
return "小时候,一双大手牵着温柔的对我讲"
func("流浪")
2,组件:当常用且重复的页面如导航栏,尾页等组件保存在单独的文件中,然后在需要使用的html文件的地方按如下语法导入即可:(提高代码的复用率,提高代码的可维护性)
{% include "nav.html" %}
3,静态文件相关
{% load static %}
# 写上这个就好改多了,灵活性提高了
引用css文件样式{% static "相对路径" %} ---->去settings中获取STATIC_URL和相对路径进行拼接
{% get_static_prefix %} ----->去settings中获取STATIC_URL "/static/"
"{% get_static_prefix %}"获取静态文件的前缀
4,自定义simpletag:和自定义filter类似,只不过接受更灵活的参数,定义注册simple tag
@register.simple_tag(name="plus")
def plus(a, b, c):
return "{} + {} + {}".format(a, b, c)
使用自定义simple tag
{% load app01_demo %}
{% plus "雪雪" "小雪" "雪人" %}
5,自定义inclusion_tag步骤
5.1>在APP下创建一个templatetags的包,templatetags单词不拼错
5.2>在包下写py文件mytags
5.3>编辑文件:
from django import template # 从Django中导入template
register = template.Library() # 实例化一个Library的对象
5.4>定义函数:1,可以接受参数 2,返回一个字典
5.5>函数加上装饰器:@register.inclusion_tag("pagination.html")html文件名
5.6>函数返回的字典交给html文件(pagination.html)
6,视图
6.1>视图的分类:CBV和FBV
CBV:class based view
FBV: function based view
6.2>CBV的流程
6.2.1>定义CVB
from django.views import View
from django.views import View
class AddPress(View):
def get(self,request):
print("get")
print(self.request)
return render(self.request, "add_press.html")
def post(self,request):
print("post")
press_name = request.POST.get("name")
return redirect("/press_list/")
6.2.2>使用
url(r'^add_press/$', views.AddPress.as_view()) # 在url执行函数的部分要写类名.as_view()
6.2.3>流程
1>AddPress.as_view() ------>view函数
2>当请求到来的时候执行view函数
3>实例化自己写的类 ------->self ------>self.cls(**initkwargs)
4>self.request = request
5>执行父类中的self.dispatch(request, *args, **kwargs)
6>判断请求方式是否被允许
<1>允许的情况下:handler = 通过反射 get post 方法
<2>不允许的情况下:handler = 不允许的方法
<3>handle(request, *args,**kwargs)
<4>返回HttpResponse对象
7>返回HttpResponse对象给django
7,response
from django.shortcuts import render, redirect, HttpResponse
7.1>HttpResponse HttpResponse("字符串")
7.2>render(request, "html文件名", {"参数":替换的参数})
7.3>redirect(跳转的地址)
7.4>HttpResponse(json.dumps(ret)) # content-Type:text/html;charset=utf-8
JsonResponse(ret) #Content-Type:application/json