zoukankan      html  css  js  c++  java
  • Django-admin、基本数据类型、csrf攻击

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

    参数

    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>
    
  • 相关阅读:
    git在eclipse中的配置 转载
    Java annotation 自定义注释@interface的用法 转载记录
    Java内存溢出的详细解决方案 转载
    sql server 分页、存储过程、视图
    重新认识Asp.Net管道模型
    vim修改替换
    Excel hong
    开始第一次Delphi
    常用正则表达式的网站
    := 赋值语句
  • 原文地址:https://www.cnblogs.com/huanghongzheng/p/11201749.html
Copyright © 2011-2022 走看看