django中通過form表單提交資料
阿新 • • 發佈:2021-06-11
https://www.cnblogs.com/shenyexiaoqingxin/p/10676090.html
目標:
①、初始form的簡單應用
②、使用Django的form元件完成新增一個帖子
方法一:普通方法
1、前端表單程式碼
<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>
2、view中新增一個檢視方法:
#新增一個帖子 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, })
3、除錯結果:正常
方法二:使用form表單(建議!!!)
使用form表單的意義,可以對錶單進行自動校驗,包括各項資料均可以在表單類中定義好,客戶端只需要渲染就可以了
1、新建一個forms.py的python檔案
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="密碼");
2、在view中新增一個檢視函式
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});---------->最終都要返回表單欄位
3、前端html
<!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>
4、除錯結果如下:正常
上面已經描述了怎麼使用Django的form表單,接下來,我們會通過Django的form表單來實現新增一個帖子
1、在forms.py中新增一個form類
class article_form(forms.Form): article_title=forms.CharField(label='帖子名稱'); article_prief=forms.CharField(label='小標題名稱'); article_content=forms.CharField(label='帖子內容');
2、在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});
3、前端程式碼
<!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>
4、最終除錯結果
進入後臺檢視(剛才新增的資料存在,說明新增功能正常)
================關於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}));
效果如下: