python搬砖狗

导航

 

在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''就会将用户输入的内容够解析为字符串并显示搭配页面上。

 

 

 

 

 

 

 

 

posted on 2019-07-16 21:45  python搬砖狗  阅读(133)  评论(0编辑  收藏  举报