最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Django中ModelForm組件的簡單配置與使用教程

 更新時間:2022年10月26日 09:59:23   作者:只羊en  
modelform是django中基于已有的model,快速生成的具有form功能的一個模塊,下面這篇文章主要給大家介紹了關(guān)于Django中ModelForm組件的簡單配置與使用教程,需要的朋友可以參考下

1、前言

hello大家好,今天學習了modelform組件,所以自己總結(jié)一下內(nèi)容,一來,是怕自己忘記了,二來,可以鞏固下今天的知識,三來,或許我寫的東西可以對一些初學Django的小伙伴帶來幫助呢,哈哈,廢話不多說,開始進入主題!

2、簡單配置

創(chuàng)建好Django項目之后,首先到自己創(chuàng)建的app的models.py的文件下創(chuàng)建模型類,我就以一個添加學生的項目來介紹一下ModelForm,然后進行數(shù)據(jù)庫遷移操作,兩條指令:python manage.py makemigrations  和  python manage.py migrate

from django.db import models
 
# Create your models here.
 
class Student(models.Model):
    name = models.CharField(max_length=6, verbose_name="學生姓名")
    age = models.IntegerField(max_length=3, verbose_name="學生年齡")
    birthday = models.DateField(verbose_name="學生生日")
    emil = models.EmailField(verbose_name="學生郵箱")
    create_time = models.DateField(auto_now_add=True, verbose_name="創(chuàng)建時間")
 
    class Meta:
        db_table = "db_student"
 
    def __str__(self):
        return self.name

隨后在自自己創(chuàng)建的app下面創(chuàng)建一個myforms.py文件(可以自己取名字,但是盡量避免重名),然后在文件中導入ModelForm,然后創(chuàng)建form類繼承ModelForm,選擇model,然后選擇需要做校驗的字段,"__all__"就是全部校驗,也可以選出或排除需要校驗的字段,如下: 

from django.forms import ModelForm
from django.forms import widgets
from appo1.models import Student
from django.core.exceptions import ValidationError
 
class StudentModelForm(ModelForm):
    class Meta:
        model = Student
        fields = "__all__"
        # fields = ["name", "age"]  # 只校驗名字和年齡
        # exclude = ["create_time"]  # 除了建立時間其他的都要校驗
        labels = {"name": "名字", "age": "年齡", "birthday": "生日", "emil": "郵箱"}
        widgets = {
            # 不同類型的字段要用不同的屬性輸出,不然表單的格式驗證失效
            # 給不同字段添加class屬性,改變樣式
            "name": widgets.TextInput({"class": "form-control"}),
            "age": widgets.NumberInput({"class": "form-control"}),
            "birthday": widgets.DateInput({"class": "form-control", "type": "date"}),  # 自己給type屬性讓前端模板有date樣式
            "emil": widgets.EmailInput({"class": "form-control"}),
        }
        error_messages = {"emil": {"invalid": "請?zhí)顚懻_的郵箱格式"}}  # 給錯誤改中文

這樣下來,基本配置也就做好了。(注意widgets設置的時候一定注意不同類型的字段要用不同的屬性)

3、創(chuàng)建模板文件,使用ModelForm組件

我們現(xiàn)在根目錄templates下創(chuàng)建html文件add_student.html,并且加上一個form標簽,然后使用模板語法寫入后傳來的form數(shù)據(jù)。(順便使用一下bootstrap組件的效果)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
    <link rel="stylesheet"  rel="external nofollow" 
          integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">
</head>
<style>
    form p span {
        color: red;
        font-size: 15px;
        margin: 5px;
        float: right;
    }
</style>
<body>
<div class="container">
    <div class="row">
        <div class="col-md-8  col-md-offset-2">
            <h1>添加學生1</h1>
            <form action="" method="post">
                {% csrf_token %}
                <p class="form-group">姓名:{{ modelform.name }}<span>{{ modelform.name.errors.0 }}</span></p>
                <p>年齡:{{ modelform.age }}</p>
                <p>生日:{{ modelform.birthday }}</p>
                <p>郵箱:{{ modelform.emil }}</p>
                <p>&nbsp</p>
                <p><input type="submit" class="btn btn-info" style="float: right"></p>
            </form>
        </div>
    </div>
</div>
 
 
</body>
</html>

隨后在urls.py文件中添加路由

from django.contrib import admin
from django.urls import path
frpm app01.views import add_stu
 
urlpatterns = [
    path('admin/', admin.site.urls),
    path('add/', add_stu),
]

 然后在視圖函數(shù)中定義函數(shù)add_stu(request)編寫邏輯代碼,這里我直接貼代碼了

from django.shortcuts import render, HttpResponse, redirect
from appo1.my_model_form import StudentModelForm
 
def add_stu(request):
    if request.method == "GET":
        modelform = StudentModelForm()
        return render(request, "add_student.html", {"modelform": modelform})
    else:
        modelform = StudentModelForm(data=request.POST)
        if modelform.is_valid():
            print(modelform.cleaned_data)
            return redirect("/")
        else:
            return render(request, "add_student.html", {"modelform": modelform})

這一通操作下來,就可以把項目本地跑起來試試了,會的到以下頁面:

這樣ModelForm組件就運用成功了!??! 

補充:django中的modelform快速上手

modelform自定義添加字段

在上面的簡單注冊form表單中,通常需要有給用戶輸入的確認密碼的字段框,但是在用戶表中又不需要這個字段,modelform其實支持自定義添加molde中沒有的字段

# app01/forms.py
 
from django import forms
from app01 import models
 
class RegisterModelForm(forms.ModelForm):
    
    # 自定義添加字段
    confirm_password = forms.CharField(label='確認密碼', widget=forms.PasswordInput)
 
    class Meta:
        model = models.UserInfo # 基于的model表名
        fields = '__all__' # 表示自動渲染所有字段

modelform 自定義顯示部分字段

  • fields = '__all__'   表示自動渲染所有字段
  • fields = [’user‘,’password‘,’email‘]  表示僅渲染列表中的字段
  • exclude = [’phone‘]  表示排除列表中的字段,效果同上 
# app01/forms.py
 
from django import forms
from app01 import models
 
class RegisterModelForm(forms.ModelForm):
    
    class Meta:
        model = models.UserInfo # 基于的model表名
        fields = ['user‘,'password‘,'email‘] # 表示僅渲染列表中的字段
        # exclude = ['phone‘] # 表示排除列表中的字段,效果同上 

modelform 自定義錯誤信息

modelform有自動校驗錯誤并返回錯誤信息的功能,如果不想用自帶的錯誤信息的內(nèi)容,可以利用modelform中的error_messages 屬性進行自定義

class RegisterModelForm(forms.ModelForm):
    class Meta:
        ...
        error_messages = { # 自定義錯誤信息
            'user':{
                'required': ('角色名稱不能為空'),
            
            },
            '字段名':{
                ‘錯誤情況1':('錯誤信息1‘),
                ...
            },
            ...
        }

modelform 自定義參數(shù)(樣式)

比如想要讓password在輸入框中以密文形式顯示,則可以自定義參數(shù)

class RegisterModelForm(forms.ModelForm):
    
    # 自定義添加字段參數(shù)(方式一)
    confirm_password = forms.CharField(label='確認密碼', widget=forms.PasswordInput)
    
    class Meta:
        ...
        widgets = { # 自定義標簽參數(shù)(方式二)
            'password': forms.PasswordInput(attrs={'class': 'form-control'})
        }

后言

Form組件和ModelForm組件的區(qū)別:

  • Form組件適合大型復雜網(wǎng)站的開發(fā)使用。
  • ModelForm犧牲了耦合性,讓模型類和form組件產(chǎn)生關(guān)系,適合小型網(wǎng)站開發(fā)使用。

到此這篇關(guān)于Django中ModelForm組件的簡單配置與使用教程的文章就介紹到這了,更多相關(guān)Django ModelForm組件使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python繪圖之桃花盛開

    Python繪圖之桃花盛開

    這篇文章主要介紹了如何用python繪制桃花樹,幫助大家更好的使用python處理圖片,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08
  • 使用python實現(xiàn)哈希表、字典、集合操作

    使用python實現(xiàn)哈希表、字典、集合操作

    這篇文章主要介紹了使用python實現(xiàn)哈希表、字典、集合操作,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-12-12
  • Python竟能畫這么漂亮的花,帥呆了(代碼分享)

    Python竟能畫這么漂亮的花,帥呆了(代碼分享)

    這篇文章主要介紹了用Python作圖的一個簡單實例,通過turtle模塊實現(xiàn)作圖,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • python實現(xiàn)高斯(Gauss)迭代法的例子

    python實現(xiàn)高斯(Gauss)迭代法的例子

    今天小編就為大家分享一篇python實現(xiàn)高斯(Gauss)迭代法的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • python神經(jīng)網(wǎng)絡編程之手寫數(shù)字識別

    python神經(jīng)網(wǎng)絡編程之手寫數(shù)字識別

    這篇文章主要介紹了python神經(jīng)網(wǎng)絡編程之手寫數(shù)字識別,文中有非常詳細的代碼示例,對正在學習python神經(jīng)網(wǎng)絡編程的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-05-05
  • python數(shù)字類型和占位符詳情

    python數(shù)字類型和占位符詳情

    這篇文章主要介紹了ython數(shù)字類型和占位符詳情,文章圍繞主題展開全文詳細內(nèi)容,需要的小伙伴可以參考一下,希望對你的學習有所幫助
    2022-03-03
  • Python算法應用實戰(zhàn)之棧詳解

    Python算法應用實戰(zhàn)之棧詳解

    棧是什么,你可以理解為一種先入后出的數(shù)據(jù)結(jié)構(gòu)(First In Last Out),一種操作受限的線性表。下面這篇文章主要給大家介紹了Python中棧的應用實戰(zhàn),文中給出了多個實例,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-02-02
  • python實現(xiàn)守護進程、守護線程、守護非守護并行

    python實現(xiàn)守護進程、守護線程、守護非守護并行

    本篇文章主要介紹了python實現(xiàn)守護進程、守護線程、守護非守護并行,詳細的介紹了守護子進程、非守護子進程并存,守護子線程非守護子進程并存的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • python 利用已有Ner模型進行數(shù)據(jù)清洗合并代碼

    python 利用已有Ner模型進行數(shù)據(jù)清洗合并代碼

    今天小編就為大家分享一篇python 利用已有Ner模型進行數(shù)據(jù)清洗合并代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • python GUI計算器的實現(xiàn)

    python GUI計算器的實現(xiàn)

    這篇文章主要介紹了python gui計算器的實現(xiàn),幫助大家更好的理解和學習python gui編程,感興趣的朋友可以了解下
    2020-10-10

最新評論

温宿县| 高邑县| 左贡县| 黄大仙区| 柘荣县| 武强县| 吉首市| 泸西县| 蒙城县| 陵水| 周口市| 霍邱县| 金湖县| 五莲县| 忻州市| 醴陵市| 迁西县| 灯塔市| 浏阳市| 沈阳市| 古交市| 且末县| 天祝| 离岛区| 洪湖市| 新泰市| 禄丰县| 德格县| 灵台县| 陵水| 那坡县| 惠州市| 大新县| 顺平县| 峨山| 西充县| 吴桥县| 大关县| 北碚区| 辽阳市| 禹州市|