经典案例:利用表单(models.Model)写一个登录注册小实例

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33867131/article/details/83346889
1、models.py文件:
from django.db import models

class User(models.Model):
    username = models.CharField(max_length=100)
    password = models.CharField(max_length=16)
    telephone = models.CharField(max_length=11)

2、forms.py文件:
from django import forms  # 注意是django下的forms
from one.models import User

class RegisterForm(forms.ModelForm):
    pwd1 = forms.CharField(max_length=16, min_length=6)
    pwd2 = forms.CharField(max_length=16, min_length=6)
    # 如果要控制多个字段,就要重写clean()函数
    def clean(self):
        cleaned_data = super().clean()
        pwd1 = cleaned_data.get('pwd1')
        pwd2 = cleaned_data.get('pwd2')
        if pwd1 != pwd2:
            raise forms.ValidationError('两个密码不一致!')

    class Meta:
        model = User
        exclude = ['password']

3、views.py文件:
from django.views.generic import View
from one.forms import RegisterForm

# 定义GET或者POST方法:根据是GET还是POST请求来做相应的操作
class IndexView(View):
    # 如果是GET请求,那么返回一个空的表单
    def get(self, request):
        form = RegisterForm()
        return render(request, 'one/index.html', {'form': form})

    # 如果是POST请求,那么将提交上来的数据进行校验
    def post(self, request):
        form = RegisterForm(request.POST)
        if form.is_valid():
            # 在调用save方法的时候,如果传入一个commit=False,那么只会生成这个模型的对象,而不会把这个对象真正的插入到数据库中
            user = form.save(commit=False)
            # 通过clean()验证之后,再将创建的对象真正的插入数据库中
            user.password = form.cleaned_data.get('pwd1')
            user.save()
            return HttpResponse("注册成功")
        else:
            return HttpResponse("注册失败")

4、路由
path('', IndexView.as_view())

5、index.html文件:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="" method="post">
    <table>
        {{ form.as_table }}
        <tr>
            <td></td>
            <td><input type="submit" value="提交"></td>
        </tr>
    </table>
</form>
</body>
</html>

猜你喜欢

转载自blog.csdn.net/qq_33867131/article/details/83346889