django知识点回顾与补充
一、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知识点回顾与补充的更多相关文章
- Django基础回顾与补充(79-80)
Django框架之回顾与补充(d79-80)一 HTTP协议:(重点) 1 请求 -请求首行 -GET /index HTTP/1.1 -请求头部(在django框架中,可以从META ...
- django知识点回顾
1.web应用 本质是基于socket实现的应用程序 浏览器-----------服务器 2.http协议:应用层协议 1.基于TCP协议 2.基于请求响应 3.短连接 4.无状态保存(引入了cook ...
- CRM项目讲解和django知识点回顾
今天想把之前写的CRM项目梳理下,顺便回顾一下djiango的部分重要知识. 1.登录页面(包含简单验证码) 首先来看下CRM的登录页面,样式啥的不重要,大家可以去jquery ui的网站上或者其他地 ...
- django知识点回顾(上)
Django---知识点: 1. 配置文件: media: avatar = models.FileField(upload_to='avatar')#数据库里的model MEDIA_ROOT=os ...
- Django 知识点补充
Django 知识点补充 1 Django如何在Model保存前做一定的固定操作,比如写一条日志 (1)利用Django的Model的Signal Dispatcher, 通过django.db.mo ...
- $Django Rest Framework-认证组件,权限组件 知识点回顾choices,on_delete
一 小知识点回顾 #orm class UserInfo (models.Model): id = models.AutoField (primary_key=True) name = models. ...
- 面试前的准备---C#知识点回顾----03
经过一天的奔波,喜忧参半,不细表 再回看下标题,C#知识点回顾 再看下内容,数据库3NF 原谅我这个标题党 今天继续回忆 1.HTTP中Post和Get区别 这忒简单了吧,大家是不是感觉到兴奋了,长舒 ...
- Django models 操作高级补充
Django models 操作高级补充 字段参数补充: 外键 约束取消 ..... ORM中原生SQL写法: raw connection extra
- Spring知识点回顾(08)spring aware
Spring知识点回顾(08)spring aware BeanNameAware 获得容器中的bean名称 BeanFactoryAware 获得当前的bean factory Applicatio ...
随机推荐
- Three.js基础探寻七——Lamber材质与Phong材质
材质(Material)是独立于物体顶点信息之外的与渲染效果相关的属性.通过设置材质可以改变物体的颜色.纹理贴图.光照模式等. 本篇将介绍基本材质以及两种基于光照模型的材质(Lamber与Phong) ...
- ElasticSearch部署文档(Ubuntu 14.04)
ElasticSearch部署文档(Ubuntu 14.04) 参考链接 https://www.elastic.co/guide/en/elasticsearch/guide/current/hea ...
- DER编码简介
概念:DER是BER的子集,它为每一个ASN.1类型定义一种唯一的编码方案. DER与BER的区别:DER在BER的基础上增加了如下限制:长度小于等于127,必须使用短型长度表示法.长度大于127,必 ...
- axio post 请求后端接收不到参数的解决办法
原因是没有对参数进行序列化 默认情况下,axios将JavaScript对象序列化为JSON. 要以应用程序/ x-www-form-urlencoded格式发送数据. 在拦截器前修改 方法一,用原生 ...
- linux——(5)文件与文件系统的压缩与打包
概念一:常见的压缩文件拓展名 .z compress程序压缩的文件. .gz gzip程序压缩的文件. .bz2 bzip2程序压缩的文件. .tar tar程序打包的数据,并没有压缩过. .tar. ...
- Kail Linux渗透测试教程之在Metasploit中扫描
Kail Linux渗透测试教程之在Metasploit中扫描 在Metasploit中扫描 在Metasploit中,附带了大量的内置扫描器.使用这些扫描器可以搜索并获得来自一台计算机或一个完整网络 ...
- 「WC2016」论战捆竹竿
「WC2016」论战捆竹竿 前置知识 参考资料:<论战捆竹竿解题报告-王鉴浩>,<字符串算法选讲-金策>. Border&Period 若前缀 \(pre(s,x)\ ...
- [BZOJ3143][HNOI2013]游走(期望+高斯消元)
3143: [Hnoi2013]游走 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3576 Solved: 1608[Submit][Status ...
- [CC-STREETTA]The Street
[CC-STREETTA]The Street 题目大意: 给定两个长度为\(n(n\le10^9)\)的数列\(A\)和\(B\),开始数列\(A\)中每一项值为\(-\infty\),数列\(B\ ...
- hdu 4111 Alice and Bob 记忆化搜索 博弈论
Alice and Bob Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pi ...