Django---form表單提交數據到數據庫(普通方法+Django的form類)

目標: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}));

 

效果以下:

相關文章
相關標籤/搜索