1. 比较运算符
# id > 3 res = models.UserInfo.objects.filter(id__gt=3) # id >= 3 res = models.UserInfo.objects.filter(id__gte=3) # id < 3 res = models.UserInfo.objects.filter(id__lt=3) # id <= 3 res = models.UserInfo.objects.filter(id__lte=3) # id != 3 res = models.UserInfo.objects.exclude(id=3) # id = 2 and name = "zekai" res = models.UserInfo.objects.filter(id=2,name="zekai") # or from django.db.models import Q res = models.UserInfo.objects.filter(Q(id__gt=3|Q(name='zekai')))2. 身份运算符 in ,not in
in res = models.UserInfo.objects.filter(id__in=[2,3,4]) not in res = models.UserInfo.objects.exclude(id__in=[2,3,4])3. between...and
res = models.UserInfo.objects.filter(id__range=[1,2,3,4])4. like
# 以'ze'开头 res = models.UserInfo.objects.filter(name__startswith='ze') # g: 全局 global i:忽略大小写 ignore 以ze开头,且忽略大小写 res = models.UserInfo.objects.filter(name__istartswith='ze') # 以'ze'结尾 res = models.UserInfo.objects.filter(name__endswith='ze') res = models.UserInfo.objects.filter(name__iendswith='ze') # 包含ze的 res = models.UserInfo.objects.filter(name__contains='ze') res = models.UserInfo.objects.filter(name__icontains='ze')5. count
res = models.UserInfo.objects.filter(id__gt=3).count()6. order by。
# 数据以id升序 res = models.UserInfo.objects.all().order_by('id') # 数据以id降序 res = models.UserInfo.objects.all().order_by('-id') # 数据以id降序,id相同的话 以age升序 res = models.UserInfo.objects.all().order_by('-id','age')7. group by
# 导入模块 from django.db.models import Avg, Sum, Max, Min, Count # res = models.UserInfo.objects.values("name").annotate(s=Sum('age')) res = models.UserInfo.objects.values("name").annotate(s=Sum('age')).filter(s__gt=50)8. limit
# 从第10行开始取,取到20行 all()就是一个列表。所以[10:20]就是一个切片 res = models.UserInfo.objects.all()[10:20]9. last
# 取最后一行数据 res = models.UserInfo.objects.last()10. only
# 仅取name这列数据,(id默认会被取进去) res = models.UserInfo.objects.only('name')11. defer
# 排除name这列数据,其余列的数据都会取进去,(id默认会被取进去) res = models.UserInfo.objects.defer('name')12. F(批量操做列的数据)
from django.db.models import F # 对UserInfo表中age列的全部数据 加 1 res = models.UserInfo.objects.update(age=F('age')+1)13. 原生的sql
1. 使用extra方法html
''' 解释:结果集修改器,一种提供额外查询参数的机制 说明:依赖model模型 ''' 用在where后: Book.objects.filter(publisher_id="1").extra(where=["title='python学习1'"]) 用在select后 Book.objects.filter(publisher_id="1").extra(select={"count":"select count(*) from hello_book"})2. 使用raw方法python
''' 解释:执行原始sql并返回模型 说明:依赖model多用于查询 ''' # 用法: book = Book.objects.raw("select * from hello_book") for item in book: print(item.title)3. 执行自定义SQLweb
''' 解释:利用游标执行 导入:from django.db import connection 说明:不依赖model ''' # 用法: from django.db import connection cursor = connection.cursor() #插入 cursor.execute("insert into hello_author(name) values('xiaol')") #更新 cursor.execute("update hello_author set name='xiaol' where id=1") #删除 cursor.execute("delete from hello_author where name='xiaol'") #查询 cursor.execute("select * from hello_author") #返回一行 raw = cursor.fetchone() print(raw) #返回全部 cursor.fetchall()14. distinct
1、xss
XSS是一种常常出如今web应用中的计算机安全漏洞,它容许恶意web用户将代码植入到提供给其它用户使用的页面中。也属一种注入攻击,注入本质上就是把输入的数据变成可执行的程序语句好比这些代码包括HTML代码和客户端脚本。sql
2、危害
- 盗取各种用户账号,如机器登陆账号、用户网银账号、各种管理员账号
- 控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力
- 盗窃企业重要的具备商业价值的资料
- 非法转帐等
3、原理:
一、反射型xss攻击
通常的浏览器与服务器交互都是,客户端向服务器发送一条请求,相似http://www.bigshop.com/product/list/?q=手机,也就是说客户向目标站点发送了一条查询全部手机的请求,而后服务器向客户端返回相关数据,这是正常的。而且手机这一关键词也会被从新返回给浏览器端的用户,这就使得xss攻击有隙可乘。黑客将http://ww.bigshop.com/product/list/?q=这条包含恶意脚本的连接经过某种方式发送给用户,那么用户一旦点击这条连接,就会向目标站点发送查询的请求,这固然是查询不到任何结果,可是这段JavaScript的脚本就会从后台转了一圈又回到浏览器,这样浏览器就会执行这段代码,也就是是获取用户的cookie值。一旦黑客拿到你的cookie值,基本上就至关于能够模拟你的身份。 能够看到,攻击者巧妙地经过反射型XSS的攻击方式,达到了在受害者的浏览器上执行脚本的目的。因为代码注入的是一个动态产生的页面而不是永久的页面,所以这种攻击方式只在点击连接的时候才产生做用,这也是它被称为非持久型XSS的缘由。二、存储型xss攻击
存储型xss攻击与反射型xss攻击的区别在于,xss攻击已经存储在服务器的数据库上,能够长期的返回给浏览器端。例如当客户A在博客园的博客或者评论区写入一段js恶意脚本,这段脚本就会永久存储到博客园的数据库,一旦当有其余用户请求查看这条博客或者评论,博客园就会将相应的数据返回给用户,固然这段js恶意脚本也会被返回给用户的浏览器并执行。4、防御
- 字符过滤:对用户的请求不管是url仍是表单提交的内容都进行长度检查和对特殊字符进行过滤
- cookie方面:避免在cookie中放入重要敏感信息
- 表单提交:尽可能使用post的方式提交表单而不是get方式
不只服务器拿到用户的请求进行过滤,在服务器将数据返回给浏览器后,浏览器也会再一次进行防御。数据库
5、在django中咱们应该如何防御?
django已经为咱们作好了防御,所以咱们不须要对其进行处理。 另外若是咱们解除django的防御措施,只须要在展现用户信息时,使用{{ 展现信息 | safe }}步骤1:django
步骤2:浏览器
步骤3:安全
步骤4:服务器
步骤五:cookie
步骤6:
防止XSS攻击
Xss攻击就是有人在页面的输入框输入一些能够执行的html代码,例如利用一些模块语言让html文件无限循环弹出窗口等.
Django自带了预防xss攻击的代码,若是想让它不防止就加“|safe”
6、其余攻击
Django实现修改列明的方法有两种:
方法1: annotate
方法2: extra