感谢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小功能 一个模板里添加这个 可以重复添加