zoukankan      html  css  js  c++  java
  • djangoIII

    今日内容 :

    今日习得了:1多对多三种创建方式

    ​ 2.forms校验性组件

    ​ 3.django settings源码

    多对多创建有三种方法

    ​ 第一种是全自动的,第二种是全手写的,第三种是半自动的

    全自动就是

    让django自动创建第三张表

    这样的话,第三张表的拓展性会很差,但是真的很方便

    全手写就是去掉manytomany那一条,然后靠自己的力量写出来

    不过如果是自己写的就不支持orm的跨表查询了,但是里面的东西都可以自己定义

    以上两种好像都不是很好,因此我们换别的方法,半自动,获取他们各自的长处,舍弃他们的短处

    很简单,在manytomany后面加一些参数即可定义新的列表名

    books = models.ManyToManyField(to='Book', through='Book2Author', through_fields=("authors","book"))

    但是它任然不支持

    add remove clear set

    forms组件可以手动书写html代码获取用户输入

    然后将数据传递给后端做数据校验

    如果数据出错了会展示错误信息

    然后如果我们要使用forms组件的话必须要提前写一个类

    不过不要忘记导入模块

    			class MyForm(forms.Form):
    				# username字段 最少三位 最多八位
    				username = forms.CharField(max_length=8,min_length=3)
    				# password字段 最少三位  最多八位
    				password = forms.CharField(max_length=8,min_length=3)
    				# email字段 必须是邮箱格式
    				email = forms.EmailField()
    

    校验数据页很简单哦

    我们只要给写好的类传字典数据就行

    这里我们来举个例子,首先我们定义一个表格

    form_obj=views.MyForm({'username':'jason','password':'12','email':'123'}})

    然后通过is_valid()来判断输入的数据是否合法
    如果有不合法通过errors来查看为什么不合法
    cleaned_data可以看合法的数据
    如果有个地方没有输入的话.报错的内容会变成this field is required
    如果写多了,那是没问题的,只会校验它需要的参数

    渲染标签
    forms组件只会渲染输入的标签,如果要提交按钮或者选择按钮得我们自己手动添加

    {{ form_obj.as_p }}这个会渲染所有input框
    {{ form_obj.as_ul }}
    {{ form_obj.as_table }}可是这些方法的封装程度太高了,很难修改

    还有一种方法
    {{ form_obj.username.label }}{{ form_obj.username }}
    {{ form_obj.username.label }}{{ form_obj.password }}
    {{ form_obj.username.label }}{{ form_obj.email }}
    懒人克星,真的太长了,于是我就放弃使用这种了

    因此我们使用第三只方法
    {% for form in form_obj %}

    {{form.lable}}{{form}}


    {% endfor %}

    前端的数据校验是那么的弱不禁风,稍微动一下手脚就能攻破,因此我们一般都是后端来进行数据校验
    校验数据我们会在后端使用列表和validator

    from django.core.validators import RegexValidator
    validators=[

    RegexValidator(r'^[0-9]+$', '请输入数字'), RegexValidator(r'^159[0-9]+$', '数字必须以159开头'),

    ]

    钩子函数HOOK

    当你觉得上面所有的校验还不能满足的时候就该轮到钩子来治你了

    在这个函数里面你可以写任意的校验代码

    如果你想校验单个字段就使用局部钩子

    想要校验多个字段就要使用全局钩子

    光是这些还没完

    要想添加其他的功能,你可以用

    label initial required widget等

    label对应input提示信息

    initial 对应input框默认值

    required 对应默认为true 可以控制是否必填

    widge 可以给input框设定样式

  • 相关阅读:
    Oracle数据库内置函数
    软件测试工程师笔试题带答案
    JavaBean对象与Map对象互相转化
    Android之MVP模式实现登录和网络数据加载
    AndroidStudio使用偷懒插件Butterknife和GsonFormat
    最强 Android Studio 使用小技巧和快捷键
    android--------Retrofit+RxJava的使用
    Android之封装好的异步网络请求框架
    Android之MVC模式的使用
    Andriod的Http请求获取Cookie信息并同步保存,使第二次不用登录也可查看个人信息
  • 原文地址:https://www.cnblogs.com/jimGraymane/p/11979409.html
Copyright © 2011-2022 走看看