一、django知识点回顾

1.Cookie操作
- 客户端本地存储的键值对
2.Session操作
- 3.URL路由
- /index -> view.函数 4.MTV 5.View中返回方式
- HttpResponse("内容")
- render(request,'模板路径',{})
- redirect('URL')
6.启动
python manage.py runserver 7. 创建project
django-admin startproject [project名称]
python manage.py startapp [app名称] 8. URL中有别名
[
('/index/(\d+)', func, name='xxoo')
] 9. settings.py配置 STATICFILES_DIRS=(
os.path.join(BASE_DIR,'static'),
)
10. 模板
{{变量}}
{% for,if, %} views.py
def func(request):
return render(request, 'index.html',{'arg': [1,3,4,6]}) index.html: {{arg.2}} 11. 数据库连接修改mysql
默认:MySQLDB
修改:pymysql 12. 模板继承
block
extends
?? 一个子模板是否可以继承多个父模板 13. request参数
- request.method
- request.GET
- request.POST.get
- request.POST.getlist('hobby') 14. 外键 15. 操作数据表
python manage.py makemigrations
python manage.py migrate 16. 在html中使用别名代指静态文件路径 17. 路由分发(urls.py) 18. 数据操作
models.Tb.objects.all().delete()
models.Tb.objects.filter(条件).delete() 19. 外键的添加添加
class A(models.Model):部门表
name = c.CharField(max_length=16,null=True,blank=True) class B() 员工表
title = c
fk = FK(A) models.B.objects.create(
title='',
fk=models.A.objects.get(id=1)
) models.B.objects.create(
title='',
fk_id= 1
) 20. 外键关联删除 21. URL匹配 [
('/index/(?P<nid>\d+)'), func
] views.py
def func(request,nid):
pass 22. ORM
- Models中操作
- shell操作 对象 = models.TB.objects.get(id=1)
[对象,] = models.TB.objects.filter(id=1) 23.CSRF 安全机制 24.自定义标签 25. XSS攻击 views.py
def func(request,nid): return render(request, 'x.html', {'k1':'v1','k2': "<h1>v2</h1>"}) x.html: {{k1}}
{{k2}}
页面输出:
v1
<h1>v2</h1> {{k1}}
{{k2|safe}}
页面输出:
v1
v2(加大加粗) 26.
obj = models.Tb.objects.get(id=1)
obj.name = '新名称'
obj.save() models.Tb.objects.filter(id=1).update(nam='新') 27. 多表查询 双下划线跨表 28. URL,namespace
29. 迭代器 

二、django补充

Day54
- 内容回顾
- 请求响应Http
1. 发送Http请求
2. 服务器接收,根据请求头中的url在路由关系表中进行匹配(从上到下)
3. 匹配成功后,执行指定的views函数
URL -> 函数 ==> FBV
URL -> 类 ==> CBV
4. 业务处理
- 根据个人需求自定
- 操作数据库
- 原生SQL
- Django ORM (可能是史上最牛的ORM框架)
==> 返回给用户的结果 <==
- 响应内容
- 响应头
- 响应体
请求字符串:
请求头
Request URL:http://www.cnblogs.com/getData/ reqeust.GET
Request Method:POST
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip, deflate, sdch
Accept-Language:zh-CN,zh;q=0.8
Cache-Control:max-age=0
Connection:keep-alive
Cookie:__utma=226521935.503212689.1478164225.1478164225.1478164225.1; __utmz=226521935.1478164225.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); _ga=GA1.2.503212689.1478164225
Host:www.cnblogs.com
If-Modified-Since:Tue, 07 Mar 2017 01:49:57 GMT
Upgrade-Insecure-Requests:1
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36
分隔:
\r\n\r\n
请求体:
nid=sb reqeust.body字符串 => reqeust.POST 字典 响应字符串:
响应头:
Cache-Control:no-cache
Connection:keep-alive
ContentType:text/json;charset=UTF-8
Date:Tue, 07 Mar 2017 03:18:30 GMT
Server:Tengine
Transfer-Encoding:chunked
X-Tingyun-Tx-Data:{"r":"","action":"WebAction\/SpringController%2Fpassport\/login (GET)","id":"rUsXqRdGAHI#hxFVdq76WLA","time":{"duration":8,"rds":0,"ex":0,"code":8,"qu":0,"mc":0,"mon":0,"db":0},"trId":"e9725e96a5a2fca4"}
X-Via:1.1 zw13:0 (Cdn Cache Server V2.0), 1.1 ietong143:1 (Cdn Cache Server V2.0)
分隔:
\r\n\r\n
响应体:
....

fbv示例:

views.py

from django.shortcuts import render,redirect,HttpResponse
# Create your views here. from django.views import View def fbv(request):
if request.method == 'GET':
return HttpResponse('FBV.GET')
elif request.method == 'POST':
return HttpResponse('FBV.POST') ----------------------------------------------------------------------------------
urls.py
urlpatterns = [
url(r' ^fbv$', views.fbv),
]

三、dispatch用法

urls.py

    url(r'^cbv$', views.CBV.as_view()),

views.py

from django.shortcuts import render,redirect,HttpResponse
# Create your views here. from django.views import View class CBV(View): def dispatch(self, request, *args, **kwargs):
result =super(CBV,self).dispatch(request, *args, **kwargs)
return result def get(self,request):
return render(request,'cbv.html') def post(self,request):
return HttpResponse('CBV.POST')

cbv.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="cbv" method="POST">
<input type="text" />
<input type="submit" />
</form>
</body>
</html>

四、增,删,改,查

1、手动创建app命令

python manage.py startapp app01

2、配置新app_设置settings.py

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app01',
]

3、增,册,改,查

models.py

from django.db import models

# Create your models here.

# 在数据库创建表,表名userinfo
class UserInfo(models.Model):
name = models.CharField(max_length=16) # 表中创建一列数据
age = models.IntegerField() class Group(models.Model):
caption = models.CharField(max_length=16) # userinfo
"""
id name(字符串类型) age
1 root 18
2 eric 20
"""
"""
1. 创建和修改数据库表
在settings中的配置app的名字app02
python manage.py makemigrations
python manage.py migrate
2. 数据库操作
增删改查
"""

test.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>test</h1>
<ul>
{# #[{id:1,name:root,age:18},{id:1,name:root,age:18},]#}
{% for foo in uuu %}
<li>{{ foo.id }} ----- {{ foo.name }} ----- {{ foo.age }} </li>
{% endfor %}
</ul>
</body>
</html>

views.py

from django.shortcuts import render
from django.shortcuts import HttpResponse # Create your views here.
from app02 import models
def test(request):
# 增加
# name,age表示列名
   #方法一:
# models.UserInfo.objects.create(name='alex',age=18)
   #方法二:
#Teachers.object.create(name='root')
    obj = Teachers(name='root')
    obj.save()
# models.Group.objects.create(caption='组2') # 获取
# user_list = models.UserInfo.objects.all()
#[{id:1,name:root,age:18},{id:1,name:root,age:18},] # 删除
# models.UserInfo.objects.all().delete()
# models.UserInfo.objects.all().delete()
# models.UserInfo.objects.filter(id=1).delete()
# models.UserInfo.objects.filter(age=18).delete()
# models.UserInfo.objects.filter(id=2,age=18).delete()
# models.UserInfo.objects.filter(id=2,age=18,name='root').delete() # 更新
# models.UserInfo.objects.all().update(age=10)
# models.UserInfo.objects.filter(name='alex').update(age=10)
# models.UserInfo.objects.filter(id=1).update(age=10)
# models.UserInfo.objects.filter(id=1).update(age=10, name='tony') # for row in user_list:
# print(row.id,row.name,row.age)
# return HttpResponse('ok')
# 1.找test.html文件,并打开获取其内容
# 2.将获取到的内容+{'user_list': user_list}参数进行替换
# 3.将替换后的字符串返回给用户
return render(request,'test.html',{'uuu': user_list}) def add_test(request):
n = request.GET.get('name')
a = request.GET.get('age')
models.UserInfo.objects.create(name=n,age=a)
return HttpResponse('创建成功') def del_test(request):
nid = request.GET.get('iid')
models.UserInfo.objects.filter(id=nid).delete()
return HttpResponse('删除成功') def edit_test(request):
i = request.GET.get('id')
n = request.GET.get('name')
a = request.GET.get('age')
models.UserInfo.objects.filter(id=i).update(name=n,age=a)
return HttpResponse('更新成功') #获取id>1的值
result = Teachers.object.filter(id__gt=1)
result = Teachers.object.filter(id__gt=1),first()

多表查询

from django.db import models

class Classes(models.Model):
"""
班级表,男
"""
titile = models.CharField(max_length=32)
m = models.ManyToManyField('Teachers') class Teachers(models.Model):
"""
老师表,女
"""
name = models.CharField (max_length=32)

class Student(models.Model):
"""
学生表
"""
username = models.CharField(max_length=32)
age = models.IntegerField()
gender = models.BooleanField()
cs = models.ForeignKey(Classes) # cs,cs_id 1 3班 ######################## 单表 ########################
# 增加
# Teachers.objects.create(name='root')
# obj = Teachers(name='root')
# obj.save()
# 查
# Teachers.objects.all()
# Teachers.objects.filter(id=1)
# Teachers.objects.filter(id=1,name='root')
# result = Teachers.objects.filter(id__gt=1)
# [obj(id,name),]
# result = Teachers.objects.filter(id__gt=1).first()
# 删除
# Teachers.objects.filter(id=1).delete()
# 改
# Teachers.objects.all().update(name='alex')
# Teachers.objects.filter(id=1).update(name='alex') ######################## 一对多 ########################
"""
班级:
id name
1 3班
2 6班 学生
id username age gender cs_id
1 东北 18 男 1
2 东北1 118 男 2
2 东北1 118 男 1
"""
# 增加
# Student.objects.create(username='东北',age=18,gender='男',cs_id=1)
# Student.objects.create(username='东北',age=18,gender='男',cs= Classes.objects.filter(id=1).first() )
# 查看
"""
ret = Student.objects.all()
# []
# [ obj(..),]
# [ obj(1 东北 18 男 1),obj(2 东北1 118 男 2),obj(..),]
for item in ret:
print(item.id)
print(item.username)
print(item.age)
print(item.gender)
print(item.cs_id)
print(item.cs.id)
print(item.cs.name)
"""
# 删除
# Student.objects.filter(id=1).delete()
# Student.objects.filter(cs_id=1).delete() # cid = input('请输入班级ID')
# Student.objects.filter(cs_id=cid).delete() # cname = input('请输入班级名称')
# Student.objects.filter(cs_id=cid).delete()
# Student.objects.filter(cs__name=cname).delete() ######################## 多对多 ######################## # 多对多
"""
班级:
id title
1 3班
2 4班
3 5班
老师:
id title
1 Alex
2 老妖
3 瞎驴
4 Eric
老师班级关系表(类):
id 班级id 老师id
1 1 2
2 1 3
4 2 2
5 2 3
6 2 4
7 1 5 # 增
obj = Classes.objects.filter(id=1).first() #1 3班
obj.m.add(2)
obj.m.add([4,3]) # obj = Classes.objects.filter(id=2).first() #1 3班
# obj.m.add(2)
# obj.m.add([4,3]) obj = Classes.objects.filter(id=1).first() #1 3班
# 删除
# obj.m.remove([4,3])
# 清空
obj.m.clear()
# 重置
obj.m.set([2,3,5]) # 查第三张表
# 把3班的所有老师列举
obj = Classes.objects.filter(id=1).frist()
obj.id
obj.titile
ret = obj.m.all() # 第三张表
# ret是一个 [ 老师1(id,name),obj(id,name) ] """

django知识点回顾与补充的更多相关文章

  1. Django基础回顾与补充(79-80)

    Django框架之回顾与补充(d79-80)一 HTTP协议:(重点)  1 请求   -请求首行    -GET /index HTTP/1.1   -请求头部(在django框架中,可以从META ...

  2. django知识点回顾

    1.web应用 本质是基于socket实现的应用程序 浏览器-----------服务器 2.http协议:应用层协议 1.基于TCP协议 2.基于请求响应 3.短连接 4.无状态保存(引入了cook ...

  3. CRM项目讲解和django知识点回顾

    今天想把之前写的CRM项目梳理下,顺便回顾一下djiango的部分重要知识. 1.登录页面(包含简单验证码) 首先来看下CRM的登录页面,样式啥的不重要,大家可以去jquery ui的网站上或者其他地 ...

  4. django知识点回顾(上)

    Django---知识点: 1. 配置文件: media: avatar = models.FileField(upload_to='avatar')#数据库里的model MEDIA_ROOT=os ...

  5. Django 知识点补充

    Django 知识点补充 1 Django如何在Model保存前做一定的固定操作,比如写一条日志 (1)利用Django的Model的Signal Dispatcher, 通过django.db.mo ...

  6. $Django Rest Framework-认证组件,权限组件 知识点回顾choices,on_delete

    一 小知识点回顾 #orm class UserInfo (models.Model): id = models.AutoField (primary_key=True) name = models. ...

  7. 面试前的准备---C#知识点回顾----03

    经过一天的奔波,喜忧参半,不细表 再回看下标题,C#知识点回顾 再看下内容,数据库3NF 原谅我这个标题党 今天继续回忆 1.HTTP中Post和Get区别 这忒简单了吧,大家是不是感觉到兴奋了,长舒 ...

  8. Django models 操作高级补充

    Django models 操作高级补充 字段参数补充: 外键 约束取消 ..... ORM中原生SQL写法: raw connection extra

  9. Spring知识点回顾(08)spring aware

    Spring知识点回顾(08)spring aware BeanNameAware 获得容器中的bean名称 BeanFactoryAware 获得当前的bean factory Applicatio ...

随机推荐

  1. 提起Ajax请求的方式(POST)

    前言 => 是ES6中的arrow function x=>x+6 就相当于 function(x){ return x+6; } 正文 XMLHttpRequest a=new XMLH ...

  2. Python类总结-ClassMethod, StaticMethod

    classmethod-把classmethod装饰的方法变成为类中的方法 作用: 把classmethod装饰的方法变成为类中的方法,这个方法直接可以被类调用,不需要依托任何对象 应用场景: 当这个 ...

  3. FastReport.Net使用:[24]其他控件(邮政编码(Zip Code),网格文本(Cellular Text)以及线性刻度尺(Linear Gauge))

    邮政编码(Zip Code) Zip Code仅支持数字(0~9) Zip Code支持数据列绑定,表达式,文本等模式 可通过修改SegmentCount属性的值来确定Zip Code的位数. 数字右 ...

  4. 【BZOJ 2216】【POI 2011】Lightning Conductor

    http://www.lydsy.com/JudgeOnline/problem.php?id=2216 学习了一下决策单调性. 这道题决策单调性比较明显,不详细证了. 对于一个决策i,如果在i之前的 ...

  5. PHP 笔记——操作MySQL数据库

    1. 连接MySQL服务器 ​ mysqli_connect :此函数是该函数的别名: mysqli::__construct() mysqli mysqli_connect ( [string se ...

  6. 【四边形不等式】POJ1160[IOI2000]-Post Office

    [题目大意] v个村庄p个邮局,邮局在村庄里,给出村庄的位置,求每个村庄到最近邮局距离之和的最小值. [思路] 四边形不等式,虽然我并不会证明:( dp[i][j]表示前i个村庄建j个邮局的最小值,w ...

  7. hdu 1011 树形dp+背包

    题意:有n个房间结构可看成一棵树,有m个士兵,从1号房间开始让士兵向相邻的房间出发,每个房间有一定的敌人,每个士兵可以对抗20个敌人,士兵在某个房间对抗敌人使无法走开,同时有一个价值,问你花费这m个士 ...

  8. 在活动之间切换(隐式Intent)

    实验名称:在活动之间切换 实验现象:在主活动中点击button1可以进入下一个活动 使用技术:隐式Intent 步骤: 1.创建一个项目,加载布局并在布局中添加一个button 部分截图未截,直接Ne ...

  9. Kafka 0.7.2 单机环境搭建

    Kafka 0.7.2 单机环境搭建当下载完Kafka后,进行解压,其目录结构如下: bin config contrib core DISCLAIMER examples lib lib_manag ...

  10. 为什么TCP连接需要三次握手分开需要四次握手?

    TCP的三次握手和四次断开TCP是一个面向连接的服务,面向连接的服务是电话系统服务模式的抽象,每一次完整的数据传输都必须经过建立连接,数据传输和终止连接3个过程,TCP建立连接的过程称为三次握手,下面 ...