目標:html
①、初始form的簡單應用前端
②、使用Django的form組件完成新增一個帖子python
方法一:普通方法
一、前端表單代碼django
<div> <form class="navbar-form navbar-left" role="search" method="post"> {%csrf_token%} <div class="form-group"> <input type="text" class="form-control" name="article_title" placeholder="帖子標題"> <input type="text" class="form-control" name="article_prief" placeholder="帖子小標題"> <input type="text" class="form-control" name="article_content"placeholder="帖子內容"> </div> <button type="submit" class="btn btn-default">提交</button> </form>
二、view中新增一個視圖方法:bootstrap
#新增一個帖子 def add(request): article_title=request.POST.get('article_title',""); article_prief=request.POST.get('article_prief',""); article_content = request.POST.get('article_content', ""); add_article=Article(article_title=article_title,article_prief_content=article_prief,article_content=article_content);--------->這是插入一篇帖子的方法 add_article.save(); return render(request,'add.html',{ 'article_title':article_title, 'article_prief':article_prief, 'article_content': article_content, })
三、調試結果:正常函數
方法二:使用form表單(建議!!!)
使用form表單的意義,能夠對錶單進行自動校驗,包括各項數據都可以在表單類中定義好,客戶端只須要渲染就能夠了
一、新建一個forms.py的python文件post
from django import forms-------->必須引入
from django import forms
class login_form(forms.Form):
#新增一個form類,在form中加入元素,好比下面,加入兩個字符串,客戶端的label名稱定義,輸入的最大值(指定後沒法輸入更多字符),
輸入的最小值(指定後若少於該值會提示),指定錯誤信息(這是一個字典類型)
username=forms.CharField(label='用戶名',min_length=2,max_length=5,error_messages={"required":"用戶名不能爲空"});
#即便什麼都沒有設置,它也已經幫你設置了默認不能爲空
pwd=forms.CharField(label="密碼");
二、在view中新增一個視圖函數ui
def login_2(request): form_obg = forms.login_form();//必須先實例化表單 if request.method=="POST": form_obg = forms.login_form(request.POST);---->將前端提交上來的字段加入表單 if form_obg.is_valid():---------------->經過表單中定義的規則對錶單的全部數據進行檢查,若是檢查經過,說明驗證經過 return HttpResponse("登錄成功"); return render(request,"login2.html",{'form_obj':form_obg});---------->最終都要返回表單字段
三、前端htmlspa
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>註冊2</title> </head> <body> <form action="/login/login2" method="post" novalidate autocomplete="off"> {% csrf_token %} <div> <label for="{{ form_obj.username.id_for_label }}">{{ form_obj.username.label }}</label>---------->bootstrap的label有一個for屬性 {{ form_obj.username }} {{ form_obj.username.errors.0 }}----------------->這個是文本框(就是charField,文本域),輸入的規則後臺指定,錯誤 </div> <div> <label for="{{ form_obj.pwd.id_for_label }}">{{ form_obj.pwd.label }}</label> {{ form_obj.pwd }} {{ form_obj.pwd.errors.0 }} </div> <div> <input type="submit" class="btn btn-success" value="註冊"> </div> </form> </body> </html>
四、調試結果以下:正常調試
上面已經描述了怎麼使用Django的form表單,接下來,咱們會經過Django的form表單來實現新增一個帖子
一、在forms.py中新增一個form類
class article_form(forms.Form): article_title=forms.CharField(label='帖子名稱'); article_prief=forms.CharField(label='小標題名稱'); article_content=forms.CharField(label='帖子內容');
二、在view.py視圖文件中新增一個視圖方法
def add_article(request): form_obj_1=forms.article_form(); if request.method=="POST": form_obj_1=forms.article_form(request.POST); if form_obj_1.is_valid(): article_title = request.POST.get("article_title", ""); article_prief = request.POST.get("article_prief", ""); article_content = request.POST.get("article_content", ""); add_article = Article(article_title=article_title, article_prief_content=article_prief, article_content=article_content); add_article.save(); return HttpResponse("新增成功"); return render(request,"add.html",{'form_obj_1':form_obj_1});
三、前端代碼
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>註冊2</title> </head> <body> <form action="/login/login2" method="post" novalidate autocomplete="off"> {% csrf_token %} <div> <label for="{{ form_obj.username.id_for_label }}">{{ form_obj.username.label }}</label> {{ form_obj.username }} {{ form_obj.username.errors.0 }} </div> <div> <label for="{{ form_obj.pwd.id_for_label }}">{{ form_obj.pwd.label }}</label> {{ form_obj.pwd }} {{ form_obj.pwd.errors.0 }} </div> <div> <input type="submit" class="btn btn-success" value="註冊"> </div> </form> </body> </html>
四、最終調試結果
進入後臺查看(剛纔新增的數據存在,說明新增功能正常)
================關於form的一些驗證=========================
class article_form(forms.Form):
#給文本框增長輸入長度的判斷,若超多或不夠,給出error_message article_title=forms.CharField(label='帖子名稱',min_length=10,max_length=200,error_messages={"required":"不能爲空","min_length":u"長度不能小於10"});
#給文本框增長默認灰色文案 article_prief=forms.CharField(label='小標題名稱',widget=forms.TextInput(attrs={"class":"form-control","placeholder":u"小標題"}));
#將文本框變成多行文本框 article_content=forms.CharField(label='帖子內容',widget=forms.widgets.Textarea(attrs={"class":"form-control","placeholder":u"詳細內容","row":3}));
效果以下: