django 笔记8 url模板 自定义函数 simple_tag
感谢alex老师~
知识点: URL - 两个没见 url>路由系统> 函数或类 > 返回字符串 Form表单提交: 提交 >url>函数或类中的方法 -.. HttpResponse() render(request,'index.html') redirect('/index/') 用户<< 返回字符串 (当接收到redirect时)自动发起另一个请求 Ajax: $.ajax({ url:'/index/', data:{} , //用字典形式发$(form对象).serialize() 但如果有多选 需要添加traditional:true type:"POST", traditional: true dataType:'JSON', success:function(data){ location.reload() #刷新 location.href = "某个地址" #跳转 } }) 提交 -> url ->函数或类中的方法 HttpResponse('''') 用户 << 字符串 注:字典需先转为字符串才能发送到后台 'k3':JSON.stringfy({'k3':'v'}) Views -请求的其他信息 request from django.core.Handers.wsgi import WSGIRequest print(type(request)) print(request.environ) 所有的信息 分辨手机PC的请求头 print(request.environ['HTTP_USER_AGENT']) #request.POST #request.GET #request.COOKIES Models - 大量的操作 Templates - 模板的继承...html extends include - 模板自定义函数 自定义simple_tag 步骤如下: 注:名字不能改 templatetags register 1:首先在某个app下面建立一个叫templatetags 2:在templatetags创建个任意py文件 如 cc.py 3:然后写上 ########################## from django import template from django.utils.safestring import mark_safe register = template.Library() @register.simple_tag //加个装饰器 def func(a1,a2): return a1+a2 ########################## 4.使用 在setting里面要注册当前app 5.在templates的html文件里使用 如1.html 6.在顶部 {% load cc %} py文件的名字 如果有extends放其下面 {%extends 'master.html' %} {% load cc %} 7.{% func 2 3 %} 就会显示5 里面的空格无关系 函数名 注: @register.simple_tag //加个装饰器 随意参数 且空格随意 缺点 不能作为if条件 def func(a1,a2): return a1+a2 {% func 2 3 %} @register.filter #filter只能传两个值 空格还得控制 应用场景:用在if判断里{% if "mm"|haha:"gg" %} {%endif%} def haha(a1,a2,a3): return a1+a2+a3 {{"mm"|haha:"gg"}} {{参数1|函数名:"参数2"}} cookie和session用来用户认证 当用户登录成功后才能操作 -装饰器 分页只能在django用 (1)用django的一个类 (2)自定义的分页 公共的主页 通用的 对用户的请求进行验证 Form验证: 路由系统URL: a./index/ -> 函数或类 b. /index/(?P<nid>\d+) 函数或类 d. /index/(?P<pid>\d+) name='root' reverse() {% url 'root' 1%} from django.urls import reverse (views.py) v = reverse('root') print(v) e./crm/ include('app01.urls') 路由分发 f.默认值 url(r'^index/', views.index,{'name':'root'}), def index(request,name): return HttpResponse(name) g.命名空间 一般不用 urls /admin/ include('app01.urls' ,namespace="m1"), /crm/ include('app01.urls', namespace = "m2") app01.urls /index/ name = 'n1' reverser('m1:n1') 生成完整的url /admin/index app01.urls /index/(\d+) 3、 def func(request): request.POST request.GET request.FILES request.getlist request.method request.path_info return render,HttpResponse, redirect 4、 render(request, "index.html") for if 索引 keys values items all 5、 class User(models.Model): username = models.CharField(max_length=32) //字符长度 email = models.EmailField() Django Admin :有验证功能 User.objects.create(username="root", email="afuhadf") 如果使用这句是可以插入成功的 ,但是在django Admin里面添加则会需要验证 增删改查 外键 一对多 多对多 注:(1)user_type = models.ForeignKey("UserType") user_list = User.objects.all() //对象列表 for obj in user_list: obj.user_type_id obj.user_type.name #对象的跨表 (2)user = User.objects.get(id=1) //单个对象 user. (3)User.objects.all().values("username","user_type__name") //__的跨表 根据values 多对多 (4) class UserType(models.Model): name = models.CharField(max_length=32) class User(models.Model): username = models.CharField(max_length=32) email = models.EmailField() user_type = models.ForeignKey("UserType") m = models.ManyToMany("UserGroup") class UserGroup(models.Model): name = .... obj = User.objects.get(id = 1) obj.m.add(2) obj.m.add(*[1,2,34]) obj.m.remove() obj.m.clear() obj.m.ser([1,2,3,4]) #多个组的信息。 UserGroup对象 obj.m.all() obj.m.filter(name = 'CTO') 创建一个base.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>{% block title%}{% endblock%}</title> {% block css %}{% endblock %} </head> <body> <div>小蛇皮</div> {% block content %}{% endblock %} <script src="/static/jquery.js"></script> {% block js %}{% endblock %} </body> </html> 在head中的 tp1.html {% extends 'base.html' %} #要继承哪个模板 {% block title %}用户管理 {% endblock %} 要继承模板的哪个块 {% block content %} <h1>用户管理</h1> <ul> for循环 <ul> {% endblock %} {% block css %} <style> <style> {% endblock %} {% block js %} <script><script> {% endblock %} 但是关于CSS JS 同时跟顺序无关 {% include "tag.html" %} 先写一个tag.html小功能 一个模板里添加这个 可以重复添加
原谅我这一生不羁放纵爱自由