栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Django入门到放弃 学习笔记 06

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Django入门到放弃 学习笔记 06

b models.ForeignKey(to Boy , on_delete models.DO_NOTHING) g models.ForeignKey(to Girl , on_delete models.DO_NOTHING)

创建数据

objs [
 models.Boy(name 刘备 ),
 models.Boy(name 关羽 ),
 models.Boy(name 张飞 ),
 models.Boy(name 赵云 )
models.Boy.objects.bulk_create(objs)
objs [
 models.Girl(nick 小赵 ),
 models.Girl(nick 小钱 ),
 models.Girl(nick 小孙 ),
 models.Girl(nick 小李 )
models.Girl.objects.bulk_create(objs)

创建关联

models.Love.objects.create(b_id 1, g_id 1)
models.Love.objects.create(b_id 1, g_id 4)
models.Love.objects.create(b_id 2, g_id 4)
models.Love.objects.create(b_id 2, g_id 2)

查找和刘备有关的姑娘

# 1. 和刘备有关的姑娘
obj models.Boy.objects.filter(name 刘备 ).first()
love_list obj.love_set.all()
for row in love_list:
 print(row.g.nick)
love_list models.Love.objects.filter(b__name 刘备 )
for row in love_list:
 print(row.g.nick)
love_list models.Love.objects.filter(b__name 刘备 ).values( g__nick )
for item in love_list:
 print(item[ g__nick ])
love_list models.Love.objects.filter(b__name 刘备 ).select_related( g )
for obj in love_list:
 print(obj.g.nick)

防止男女生多次约会

class Love(models.Model):
 b models.ForeignKey(to Boy , on_delete models.DO_NOTHING)
 g models.ForeignKey(to Girl , on_delete models.DO_NOTHING)
 class meta:
 unique_together {
 ( b , g ),

另一种不用自己创建 Love 表的方法

class Boy(models.Model):
 name models.CharField(max_length 32)
 m models.ManyToManyField( Girl )

对 m 表的操作

obj models.Boy.objects.filter(name 刘备 ).first()
obj.m.add(1)
obj.m.add(2, 3)
obj.m.add(*[4,])
obj.m.remove(1)
obj.m.remove(2, 3)
obj.m.remove(*[4,])
obj.m.set([1,])
girl_list obj.m.all() # 获取到的是所有 Girl 对象
obj.m.clear()

再或者结合在一起使用

m models.ManyToManyField( Girl , through Love , through_fields ( b , g ))
CSRF

跨站请求伪造 Cross-site request forgery

使用方法

基本应用
  form 表单中添加 {% csrf_token %}
全站禁用
  # ‘django.middleware.csrf.CsrfViewMiddleWare’,
局部禁用
  from django.views.decorators.csrf import csrf_exempt

   csrf_exempt
  def function(request):
    …
局部使用
  from django.views.decorators.csrf import csrf_protect

   csrf_protect
  def function(request):
    …

CBV 应用装饰器

from django.utils.decorators import method_decorator
在指定方法上添加
class Foo(View):
     method_decorator(wrapper)
    def get(self, request):
    …
或者加在类外
   method_decorator(wrapper, name ‘post’)
  class Foo(View):
    def post(self, request):
    …
直接添加多个
   method_decorator(wrapper, name ‘dispatch’)
  class Foo(View):
    def post(self, request):
    …

而对于 csrf 只能加在类上。

Ajax 请求

Ajax 提交数据时 携带 CSRF 的一种方式 数据方式提交

 body 
 form method post action /csrf1.html 
 {% csrf_token %}
 input id user type text name user 
 input type submit value 提交 
 a onclick submitForm(); Ajax提交 /a 
 /form 
 script src http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.12.4.min.js /script 
 script 
 function submitForm() {
 var csrf $( input[name csrfmiddlewaretoken ] ).val();
 var user $( #user ).val();
 $.ajax({
 url: /csrf1.html ,
 type: POST ,
 data: { user : user},
 success: function (arg) {
 console.log(arg);
 /script 
 /body 

另一种方式 放在请求头中

 body 
 form method post action /csrf1.html 
 {% csrf_token %}
 input id user type text name user 
 input type submit value 提交 
 a onclick submitForm(); Ajax提交 /a 
 /form 
 script src http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.12.4.min.js /script 
 script src https://cdn.staticfile.org/jquery/3.4.0/jquery.min.js /script 
 script src https://cdn.staticfile.org/jquery-cookie/1.4.1/jquery.cookie.min.js /script 
 script 
 function submitForm() {
 var token $.cookie( csrftoken );
 var user $( #user ).val();
 $.ajax({
 url: /csrf1.html ,
 type: POST ,
 headers: { X-CSRFToken : token},
 data: { user : user},
 success: function (arg) {
 console.log(arg);
 /script 
 /body 

可以通过 $.cookie 来查看和修改

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/267440.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号