jango下一对一对应查询,django列类型,分页,CSR攻击

jango下一对一对应查询,django列类型,分页,CSR攻击,第1张

概述一对一关系表查询 以员工与薪水表为例,两张表是一对一的关系,外键关系要建在薪水表中,一对一使用:OneToOneField("") 括号内填入被关系表名。 class UserInfo(models.Model): name = models.CharField(max_length=32) age = models.CharFi

一对一关系表查询

以员工与薪水表为例,两张表是一对一的关系,外键关系要建在薪水表中,一对一使用:OnetoOneFIEld("") 括号内填入被关系表名。

        class UserInfo(models.Model):            name = models.CharFIEld(max_length=32)            age = models.CharFIEld(max_length=32)                            class Salary(models.Model):            money = models.CharFIEld(max_length=32)            us = models.OnetoOneFIEld("UserInfo")        

正向查询:

res = models.Salary.objects.filter(money="3000").first()            print(res.us.name)

反向查询:

res = models.UserInfo.objects.filter(name=zekai).first()            print(res.salary.money)

django 列类型

数据类型可以与MysqL做对比,有许多相似的类型:

    MysqL                                     django                                                    tinyint                                         无                        smallint(unsigned)        SmallintegerFIEld (PositiveSmallintegerFIEld)                数字    int (unsigned))             IntegerFIEld   (PositiveIntegerFIEld)                        mediumint                                    无                        bigint(unsigned)            BigIntegerFIEld                                                float                                  floatFIEld                        decimal(5,2) : 200.23                  DecimalFIEld                                                                        char                                     无                字符串    varchar                               Charfiled                        text                                 TextFIEld                                                                时间     datetime (2019-7-17 12:23:34)    DateTimeFIEld                                 date      (2019-7-17)              DateFIEld

Django常见参数:

- 参数:                        max_length=32                        null=True  : 可以设置为null                        db_index=True : 设置索引                        default : 设置默认值                        unique : 设置唯一索引                                                    db_column: 设置一个列名                                                unique_together: 联合唯一索引                        index_together :普通联合索引                            class Meta:                                unique_together = (                                    (money,us_ID),....                                )                                index_together = (                                    (money,‘‘)                                    ....                                )            

Django admin 

admin是Django自带的管理系统

命令生成:

python3 manage.py  createsuperuser

如果想要关林自己生成的表:

    admin.py:            from app01 import models            admin.site.register(models.UserInfo)

dango admin中的列类型

django-admin中的列类型:            EmailFIEld(CharFIEld):                - 字符串类型,Django admin以及ModelForm中提供验证机制            IPAddressFIEld(FIEld)                - 字符串类型,Django admin以及ModelForm中提供验证 IPV4 机制            GenericIPAddressFIEld(FIEld)                - 字符串类型,Django admin以及ModelForm中提供验证 Ipv4和Ipv6                - 参数:                    protocol,用于指定Ipv4或Ipv6, both,"ipv4","ipv6"                    unpack_ipv4, 如果指定为True,则输入::ffff:192.0.2.1时候,可解析为192.0.2.1,开启刺功能,需要protocol="both"            URLFIEld(CharFIEld)                - 字符串类型,Django admin以及ModelForm中提供验证 URL            SlugFIEld(CharFIEld)                - 字符串类型,Django admin以及ModelForm中提供验证支持 字母、数字、下划线、连接符(减号)            CommaSeparatedIntegerFIEld(CharFIEld)                - 字符串类型,格式必须为逗号分割的数字            UUIDFIEld(FIEld)                - 字符串类型,Django admin以及ModelForm中提供对UUID格式的验证            fileFIEld(FIEld)            djagno-admin中的参数 :            verbose_name        admin中显示的字段名称                        blank               admin中是否允许用户输入为空            editable            admin中是否可以编辑            help_text           admin中该字段的提示信息            choices             admin中显示选择框的内容,用不变动的数据放在内存中从而避免跨表 *** 作            choices = (                (1,),(2,)            )            gender = models.IntegerFIEld(choices=chocIEs)                        ID name  gender (男女)            

分页

分页是将从数据库中查找到的数据分批次展示给用户看,如过数据有成千上万条,不做分页处理的话,给用户的用户体验极差。

分页与MysqL中的分页相似,开始位置为当前页数减去一在在乘单页展示的数据量。结束位置为当前页数乘单页展示量。

子定制分页:

1  导入我们 的mypage模块

2 通过get方法得到当前页数,使用.count 方法得到表中的总数据量

3  传入我们自己定制的类中,得到页数,和做展示的具体判断。

4 调用类中的start和end方法对取出的数据进行切片

5 将我们 *** 作出来的数据传到前台进行模板渲染

6 在前台写入 {{page.page_HTML|safe}}  page_HTML 是我们在类中条件满足后得到的HTML语句。

*** 作案例:

from xx import mypagecurrent_page = request.GET.get(page)        all_count = models.students.objects.count()        page_obj = mypage.Pagination(current_page=current_page,all_count=all_count)        page_List = models.students.objects.all()[page_obj.start:page_obj.end]        classes = app01.classes.objects.all()        return render(request,students.HTML,{students:page_List,"page":page_obj,classes:classes})

CSRF攻击

全称为跨站请求伪造

CSRF攻击指的是 当我们在在同一浏览器中先是访问了授信网站,在没有退出的情况下,又访问了没有守信的网站,恰好被被某块内容或者图片吸引点了进去,这时候我们就有可能被黑客得到我们的个人登录信息,得到后就可以模拟我们对授信网站进行 *** 作,如果之前我们访问的是银行网站,那完蛋了,你的钱就可能不见了。这样的网络攻击就被称为CSRF攻击。

解决办法是,开启CSRF验证,在djngo中是通过settings中的‘django.mIDdleware.csrf.CsrfVIEwMIDdleware‘来控制的,开启的话只要将注释打开即可,当我们开启后有些功能不想被控制的话,加上一个装饰器就好了。

在vIEws视图中引入如下函数:

from django.vIEws.decorators.csrf import csrf_exempt                                        @csrf_exempt                    def csrf1(request):                        if request.method == GET:                            return render(request,csrf1.HTML)                        else:                            return httpResponse(ok)

在未开启的情况下我们如果想开启部分功能接收CSRF验证的话,在视图中导入一下函数

                1. settings中,注释 ====》@H_875_404@#@H_875_404@‘django.mIDdleware.csrf.CsrfVIEwMIDdleware‘,                2. vIEws中,引入如下函数                    from django.vIEws.decorators.csrf import csrf_protect                                        @csrf_protect                    def csrf1(request):                        if request.method == GET:                            return render(request,csrf1.HTML)                        else:                            return httpResponse(ok)

如果视图中是cbv的话:

from django.utils.decorators import method_decorator                    @method_decorator(csrf_protect,name=get)                    class User(VIEw):                        def get(self,request):                            pass                        def post(self,request):                            pass

在AJAX请求数据的话:

AJAX:csrftoken = $(input[name="csrfmIDdlewaretoken"]).val()$.AJAX({type:"POST",url : /xxxx/,data: {"name":xxxx},headers : {X-CSrftoken: token},success: function(){console.log(data)}})
总结

以上是内存溢出为你收集整理的jango下一对一对应查询,django列类型,分页,CSR攻击全部内容,希望文章能够帮你解决jango下一对一对应查询,django列类型,分页,CSR攻击所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1197841.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存