一对一关系表查询
以员工与薪水表为例,两张表是一对一的关系,外键关系要建在薪水表中,一对一使用: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攻击所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)