Django——ModelForm隨筆

1.簡介

ModelForm模塊是 model和form的結合
下面看使用方法

模型設計

from django.forms import ModelForm


class Blog(models.Model):
    title = models.CharField(blank=False, max_length=40, unique=True, verbose_name='標題')
    body = models.TextField(verbose_name='內容')
    create_time = models.DateTimeField(verbose_name='時間', auto_now_add=True)

    def __str__(self):
        return self.title


class BlogModelForm(ModelForm):
    class Meta:
        model = Blog            綁定模型
        fields = '__all__'      展示全部字段


模型表單一體化

前端文件

<form action="/app/modelform/" method="post">     接口路由
    {% csrf_token %}
    <table>
        {{obj}}
        {{error}}
    </table>
    <input type="submit" value="提交">
</form>


設計免於csrf安全認證
顯示錯誤信息

後端接口


def form(request):
    if request.method == 'POST':
        obj = models.BlogModelForm(request.POST)
        if obj.is_valid():                         判斷是否通過驗證
            post = obj.save(commit=False)          模型保存
            post.create_time = datetime.now()
            post.save()                            數據庫保存
            return HttpResponse('成功')
        return render(request, 'index.html', {'error': obj.errors})
                                                   顯示提示信息
    else:
        obj = models.BlogModelForm()               實例化空表單
        return render(request, 'index.html', {'obj': obj})


實驗效果
在這裏插入圖片描述

2.設計驗證碼模塊

安裝模塊完成配置

pip install django-simple-captcha == 0.5.5

在 settings文件中 INSTALLED_APPS 處添加 captcha

從路由文件配置
url('^captcha/', include('captcha.urls'))


form表單內配置
{% csrf_token %}    防止POST請求被攔截

<div class="form-group marb8 captcha1">
        <label>驗 證 碼</label>
         {{ register_form.captcha }}
</div>
前端顯示的部分  
註釋: register_form = Registerform(request.POST)  設計的form表單


表單模型設計字段
 captcha = CaptchaField()

效果如下
在這裏插入圖片描述

3.表單部分字段驗證

class Registerform(forms.Form):
    email = forms.EmailField(required=True)
    password = forms.CharField(max_length=30, min_length=5)
    captcha = CaptchaField()

    def clean_password(self):
        if len(self.cleaned_data['password']) != 6:
            raise forms.ValidationError('密碼格式不正確')


ModelForm同樣可以完成自動驗證
注意: 自定義驗證方法名爲 clean_   +   驗證字段名

4.收藏功能實現

若用戶此時已經處於登錄狀態

request.user 可獲得當前用戶對象
request.user.is_authenticated() 可判斷是否通過認證
前提是使用 django 自帶的User模型 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章