Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Django学习总结(六) #66

Open
PyxYuYu opened this issue Dec 12, 2016 · 0 comments
Open

Django学习总结(六) #66

PyxYuYu opened this issue Dec 12, 2016 · 0 comments
Labels

Comments

@PyxYuYu
Copy link
Owner

PyxYuYu commented Dec 12, 2016

Nothing is impossible for a willing heart.

0x01 Django

  • Django Blog 学习总结
    • Django Tips
      • django.forms
        • 这个表单框架的最主要用法是为每一个将要处理的 HTML<Form> 定义一个 Form 类,这个类可以存在任何地方,甚至可以直接卸载 views.py 中,但是一般都会在 app 目录下新建一个 forms.py 文件,所有 Form 类都放在其中
        • 表单中每一个字段都作为 Form 类的属性,被展现成 Field 类,每一个字段都默认是必填的,如果要使某个字段是可选项,必须指定 required=False
          from djanog import forms
          
          class EmailPostForm(forms.Form):
              name = forms.CharField(max_length=25)
          	email = forms.EmailField()
          	to = forms.EmailField()
          	comments = forms.CharField(required=False, widget=forms.Textarea)
        • forms 框架把每个字段的显示逻辑分离到一组部件(widget)中,每个字段类型都拥有一个默认的部件,比如:利用 widget=forms.Textarea 就可以替换掉默认的部件
          • Field 类表现的是 检验 逻辑,而部件表现的是 显示 逻辑
          • 比如上面的 comments 需要可以多行文本,而默认的 text 是单行,所以显示逻辑需要多行,部件就可以更换成 Textarea
        • Form 对象有以下属性:
          • f.is_bound : 判断 f 是否绑定表单类
          • f.is_valid() : 判断 f(已绑定表单类)中的数据是否合法
          • f.errors : 提供一个字段和错误消息相映射的字典(没有的话,对应空字符串)
          • f.cleaned_data : Form 实体 f 中的数据合法,会有这个属性,返回一个提交数据的字典
          • f.as_p() : 用 <p>...</p> 标签来为每个字段添加格式输出,类似的有 f.as_ul() f.as_table()
            • 注意: <table> <ul> 标签添加时,外面任然需要写,比如
              <table>
                  {{ f.as_table }}
              </table>
        • 创建 Form 实体时,可以使用 initial 参数来实现给字段添加初始值
          f = EmailPostForm(initial={'to': 'xxxx@qq.com'})
        • 传入初始值的表单是未绑定实体的,不会有错误信息 errors 反馈(即返回的是空字符串),而绑定的表单(即不通过初始值传入数据,比如用 request.POST 传入)就会有 errors 反馈
        • forms.py 中可以自定义字段的检测标准,在 forms 类中创建检测函数
          • 检测函数,以 clean_ + 字段名 为函数名,系统会自动寻找匹配函数的检测方法,如果检测到存在这样的函数,那么这个检测函数将在指定字段的默认检测逻辑执行之后被调用(也就是先检测是否是 CharField 之类的类型)
          • 检测的字段可以用 字段内容 = self.cleaned_data[字段名] 来获取,最后检测完后
            • 如果不符合则用 raise forms.ValidationError('Not enough words') 抛出异常
            • 符合的话,最后需要用 return 返回 字段内容
        • forms.py 中定义 form 类中的字段时,可以自定义字段名在 HTML 表单中生成的标签
          • HTML 中生成标签名 : 空格代替下划线,首字母大写,如 e_mail 就是 E mail
          • 如果需要自定义的话,利用 label 参数
            class EmailPostForm(forms.Form):
                email = forms.EmailField(required=False, label='Your e-mail address')
      • URLconf urls.py 要点
        • urlpatterns 中导入 url 有多种方法
          • 方法一:利用 import 导入 views
          • 方法二:不导入 views ,直接写 app.views.xxx (直接写入的话,需要用引号包裹)
        • 命名正则表达式组的利用
          • 无命名正则表达式组就是在需要捕获的 URL 部分加上圆括号,表示将捕获的文本作为位置参数传递给视图函数调用
          • 命名正则表达式组就是用关键字命名的方式来传递,而不是位置参数的方式传递
          • 命名正则表达式组: (?P<name>pattern) name 就是组的名字
            from django.conf.urls import url
            from . import views
            
            urlpattrens = [
                url(r'(?P<year>\d{4})/(?P<month>\d{2})/$', views.post_detail),
            ]
          • 使用命名组可以让 URLconfs 更加清晰,减少 BUG
@PyxYuYu PyxYuYu added the Django label Dec 12, 2016
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant