zoukankan      html  css  js  c++  java
  • ajax提交文件,django测试脚本环境书写,froms组件,钩子函数

    1.在新版本中,添加app是直接在settings设置中,将INSTALLED_APPS里添加app名字,

    但是他的完整写法是   'app01.apps.App01Config'  因为新版本做了优化,所以直接写app名字也支持

    2.form标签传输文件

    form表单默认的编码格式是urlencoded不支持发文件(只能把文件名发过去)
    它所对应数据格式 username=jason&password=123

    1.指定form提交的编码格式。 在form标签内添加  enctype="multipart/form-data" 才能实现使用form标签传输文件的操作

    2.在input标签中将type设为 file 会出现选择文件栏

    使用post请求提交给后台后,后台使用request.FILES.get()来获取文件,会获取文件对象,对象可以使用 . name 方法来获取文件名

    3. ajax提交文件

    在bootstrap 中的boot jQuery中导入jQuery。放置在<head>中

    1. input标签type设为file 。会出现选择文件栏

    2.设置一个button按钮

    2. 使用ajax设置点击事件,然后使用FormData()生成一个内置对象 

    此对象既可以传普通的数据(键值对的数据)也可以传输文件

    普通数据:

    使用变量forData.append('name' , 'owen'); 添加普通数据

    传文件:

    1.先获取文件对象  $('#d2‘)[0].files[0],  先获取标签对象,取索引转成原生js对象,,再使用内置方法files获得文件对象

    2.再使用formData.append('myfile' , 文件对象) 键值对的方式添加到formData中,

    再将formData通过ajax发送给后台,后台使用request.FILES.get()获取文件,使用request.POST.get()来获取普通数据

    forms组件:

    关于django中测试脚本书写

    新建一个py文件,将manage.py中的以下代码复制到py文件中

    import os
    import sys

    if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "djtest.settings")

          再添加如下代码

        imput django

        django.setup()

        再导入 app中的modles

        from app01 imput modelsz

    还有一种方法是再pycharm解释器下方有一个python Console,该环境下帮你做好了以上的操作

     

    forms组件中所有字段默认都是必填的, 参数少传会给必须有 该位置必须要传参数的提示

    在数据都满足form组件校验规则下,参数多传,或者传入没有的字段会过滤掉不接收

    补充:

    render 中的  locals() ,会将所在的名称空间所有的名字都传递给模板页面

    forms组件渲染标签:

      forms组件只能帮你渲染 获取用户输入(输入框,选择框,下拉框。。)的标签

      forms组件取消前端校验功能 在form标签中添加 novalidata

    forms组件后台校验数据

      直接使用

    form_obj = MyForm() # 实例化字段的类

    if request.method == 'POST': # 判断他是否是post请求

    form_obj = MyForm(request.POST) # 直接将类传入request.POST字典,因为request.post本身就是一个字典,而forms组件所需要的参数就是字典。所以直接将前台传过来的数据传进去判断。得到的结果与is_valid()一样,得到的是bool值,直接进行判断

    form组件当前端输入的信息不合法的时候,页面上的数据保留不会刷新,这样方便用户修改

    forms组件的常用参数:

    username= forms.CharField(max_length=6, label='用户名', error_messages={'max_length' : ‘用户名最长6位置’,

                                        'required' : '用户名不能为空' })

    1. max_length     : 设置最大长度

    2. label='用户名’       :自定义字段名,因为默认的是创建的字段名,是英文,可以自定义为中文

    3. initial='请输入用户名' : 设置input框中的默认值

    4. # 普通字段错误信息设置  error_messages={ ‘max_length’ : '用户名最大只能是6位,‘required’ : ‘用户名不能为空’ }    :错误信息  参数是一个字典. key必须写对。value可以随便设置

    5. # 邮箱字段错误信息设置  error_messages={‘invalid’ : '邮箱格式不正确' , 'required' :  '邮箱不能为空'}           : 错误信息   

    6. widget=widgets.PasswordInput( attrs={‘class’ : 'form-control'})  : 设置密码为密文

    forms字段校验的两种方式

    1. RegexValidator验证器

    2.钩子函数

    钩子函数是写在字段类下面的函数,用来校验客户端传过来的信息

    1.局部钩子。针对字段名来做校验的函数  (函数命名开头都是clean)

    比如 def clean_username(self):  加判断

        username = clenaed_data.get('username')

        

  • 相关阅读:
    导包路径
    django导入环境变量 Please specify Django project root directory
    替换django的user模型,mysql迁移表报错 django.db.migrations.exceptions.InconsistentMigrationHistory: Migration admin.0001_initial is applied before its dependen cy user.0001_initial on database 'default'.
    解决Chrome调试(debugger)
    check the manual that corresponds to your MySQL server version for the right syntax to use near 'order) values ('徐小波','XuXiaoB','男','1',' at line 1")
    MySQL命令(其三)
    MySQL操作命令(其二)
    MySQL命令(其一)
    [POJ2559]Largest Rectangle in a Histogram (栈)
    [HDU4864]Task (贪心)
  • 原文地址:https://www.cnblogs.com/liguodeboke/p/11229538.html
Copyright © 2011-2022 走看看