Django-admin、基本数据类型、csrf攻击

django数据类型与mysql数据类型比较

1659176-20190717162419665-1437184460.png

参数
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

django自带的管理后台系统
命令生成:
    python3 manage.py  createsuperuser
想要管理自己生成的表:
    admin.py:
    from app01 import models
    admin.site.register(models.UserInfo)
        
    
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 (男女)

CSRF攻击

开启全局的csrf验证
  1. settings中,打开注释 'django.middleware.csrf.CsrfViewMiddleware',
  2. 表单中,开启csrf_token
<form>
    {% csrf_token %}
    <input type='text'>
</form>

如上, 全站都会进行csrf验证

关闭部分的csrf验证:
  1. settings中,打开注释 ====》'django.middleware.csrf.CsrfViewMiddleware',
  2. 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中,注释 ====》#'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:

若是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:
csrftoken = $('input[name="csrfmiddlewaretoken"]').val()
$.ajax({
type:"POST",
url : '/xxxx/',
data: {"name":'xxxx'},
headers : {'X-CSRFToken': token},
success: function(){
console.log(data)
}
})
# 第一种
data:{'csrfmiddlewaretoken':$('[name="csrfmiddlewaretoken"]').val()}
# 第二种
data:{'csrfmiddlewaretoken':'{{ csrf_token }}'}
xxx.html
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Title</title>
</head>
<body>

<form action="/login/" method="post">
    {% csrf_token %}
    <input type="text" name="account">
    <input type="submit">    
</form>
</body>
</html>

转载于:https://www.cnblogs.com/huanghongzheng/p/11201749.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值