在app下创建表的两句真言:python3 manage.py makemirations ,python3 manage.py migrate.
class usertype(models.Model): title = models.CharField(max_length=32,null=True) class user(models.Model): name = models.CharField(max_length=31,null=True) ud = models.ForeignKey('usertype')
插入数据:
1 插入一条:
# models.usertype.objects.create(title='销售')
2 插入多条:
# obj1 = [ # models.usertype(title='生产'), # models.usertype(title='物流'), # models.usertype(title='采购'), # models.usertype(title='前台'), # models.usertype(title='会计'), # ] # models.usertype.objects.bulk_create(obj1)
筛选数据:
取出一条数据:
# res = models.user.objects.frist()
取出所有:
# res = models.user.objects.all()
1 筛选一条:
# res = models.user.objects.filter(id=2) ##单个的对象
筛选多条:
# res = models.user.objects.filter(ud_id__gt=3) ##id大于三的所有数据,以对象形式展示出来 # res = models.user.objects.filter(ud_id__gte=3) ##id大于等于三的所有数据,以对象形式展示出来 # res = models.user.objects.filter(ud_id__lt=3) ## id小于三的所有数据,以对象形式展示出来 # res = models.user.objects.filter(ud_id__lte=3) ## id小于等于三的所有数据,以对象形式展示出来
只取一列数据:
# res = models.user.objects.values('name').all()
#<QuerySet [{'name': '小明'}, {'name': 'zekai'}]> 查询name列的所有值,以列表套字典的形式
通过list方法来取出的数据,是以列表套元组的实行展示出来的:
# res = models.user.objects.values_list('name').all()
#<QuerySet [('小明',), ('zekai)]> 通过values_list方法取出的列的数据,以列表套元组的形式展示
一对多表的正查,反查和神奇的下划线:
正查:
# res = models.user.objects.filter(id=23).all() # 正向查询 # print(res) # for row in res: # print(row.name,row.ud.title) # print(res) ##<QuerySet [<user: user object>, <user: user object>]>
反查:
# 反向查询 # res = models.usertype.objects.filter(id=5).all() # for row in res: # print(row.id,row.user_set.values('name').all()) # return HttpResponse('ok')
神奇的下划线跨表查找:
# 神奇的下划线跨表查找 # res = models.user.objects.values('ud__title') # print(res)
多对多表格查询:
在app下 models 创建类使用两句真理生成表:
class Boy(models.Model): name = models.CharField(max_length=32,null=True) class Girl(models.Model): name = models.CharField(max_length=32,null=True) class Lvoe(models.Model): b = models.ForeignKey('Boy',null=True) g = models.ForeignKey('Girl',null=True) python3 manage.py makemigrations python3 manage.py migrate
查找小明的约会对象的三种方法:
1
res = models.Boy.objects.filter(name='小明').first() gril_list = res.love_set.all() for girl in girl_list: print(girl.g.name)
2 通过神奇的下划线去第三张关系表中去查找小明所在行数,找出之后for循环,打印出
小明相亲对象的名字:
# res = models.Lvoe.objects.filter(b__name='小明').all() # for row in res: # print(row.g.name)
3 直接去第三张关系表中通过神奇的下划线先找到小明所在的行数后,取出所有的values
值,并通过神奇下划线来去取出小明相亲对象的名字。
res = models.Love.objects.filter(b__name='小明').values("g__name") print(res)
生成对应表的两种方法:
1 manytomany:
class Boy(models.Model): name = models.CharField(max_length=32, null=True) g = models.ManyToManyField('Girl', null=True) class Girl(models.Model): nick = models.CharField(max_length=32, null=True)
2 我们自己通过类来生成表:
class Lvoe(models.Model): b = models.ForeignKey('Boy',null=True) g = models.ForeignKey('Girl',null=True) python3 manage.py makemigrations python3 manage.py migrate
当我们使用manytomany来生成对应表,操作时就与类生成表有些不同。
查询数据:
obj = models.Boy.objects.filter(name='谢增城').first() res = obj.g.all()
obj.g.all查找的是girl那张表不是查找manytomany生成的对应表,因为那张表不是通过实例化类产生的表。
添加一条数据:
obj.g.add(3)
添加多条数据,以列表传入,传入时要打散传入:
obj.g.add(*[1,2])
重制数据,会将数据处理掉只剩一条我们重置的数据:
obj.g.set([4])
删除 使用clear:
obj = models.Boy.objects.filter(name='小明').first() obj.g.clear()
删除与取消级联删除
一般删除来说有外键关联被关联的数据被删除后,关联表中有该数据关联关系的数据也会被
删除的,如果不想关联的数据不被一起删除的话,在生成外键关系时,设置on_delete = models.set_NULL即可。一般不修改的话默认是on_delete=models.CASCADE
Xss攻击:
他的全称是:跨站脚本攻击,脚本指的是js脚本语言
例:
后端逻辑:
text_list = [] def Xss(request): if request.method == 'GET': return render(request, 'Xss.html') else: text = request.POST.get('xss') text_list.append(text) print(text_list) return redirect('/app01/show/') def show(request): return render(request,'show.html',{'text_list':text_list})
前端页面:
<form action="/app01/Xss/" method="post"> <input type="text" name="xss"> <input type="submit" value="tijiao"> </form>
<ul> {% for text in text_list %} <li>{{ text }}</li> {% endfor %} </ul>
产生这种攻击的原因是我们不能知道用户会输入什么,当用户输入一段js代码时,前端页面会解析,如果没有处理机制的话就会执行。这样有很大的安全隐患。在django下有一个设置如果我们不在文本区域写入''|safe''就会将用户输入的内容够解析为字符串并显示搭配页面上。