zoukankan      html  css  js  c++  java
  • django orm增删改查,多对多表格查询,Xss攻击

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

     

  • 相关阅读:
    ConcurrentHashMap 实现缓存类
    maven 时区设置&ip&jdk编译版本
    【Hutool】工具类之日期时间工具-DateUtil
    正则表达式
    kafka connector
    kafka
    debezium、kafka connector 解析 mysql binlog 到 kafak
    网络流
    斜率优化
    8.8
  • 原文地址:https://www.cnblogs.com/1624413646hxy/p/11197709.html
Copyright © 2011-2022 走看看