django 使用 html 模板将数据插入数据库

django inserting data into db using html template

我是 django 的新手。我正在尝试将已经创建的 html 文件连接到 django 后端而不重建整个文件。 已经在 python 中创建了表单和视图,但不知道要将什么放入 html 文件。

查看class:

class signup(View):
    template = loader.get_template('signup.html')
    form_class = UserRegistrationForm

    def get(self, request):
        form = self.form_class(None)
        return render(request, 'signup.html', {'form': form})

    def post(self, request):
        form = self.form_class(request.POST)

        if form.is_valid():
            current_user = form.save(commit=False)

            email = form.cleaned_data['email']
            password = form.cleaned_data['password']
            current_user.set_password(password)
            current_user.save()

            userToAuthenticate = authenticate(email=email, password=password)

            if userToAuthenticate is not None:
                if userToAuthenticate.is_active:
                    login(request, userToAuthenticate)
                    return redirect('siteViews:index')

        return render(request, 'signup.html', {'form': form})

表单代码:

class UserRegistrationForm(forms.ModelForm):

    password = forms.CharField(widget=forms.PasswordInput)

    class Meta:
        model = User
        fields = ['email', 'password']

和html代码:

    <div id="registersquare">
        <div id="panel">
            <form class="form-horizontal" role="form" action="" method="post" enctype="multipart/form-data">
                {% csrf_token %}
                <label for="email">Email adress:</label>
                <input type="email" id="username" name="email}">

                <label for="password">Password:</label>
                <input type="password" id="password" name="password">

                <label for="password">Repeat password:</label>
                <input type="password" id="password" name="repeatedpassword">

                <label class="control-label col-sm-2" for="password">{{ field.label_tag }}</label>

                <div id="lower">
                    <input type="checkbox"><label class="check" for="checkbox"><a style="color: #999999;" href="#">I Accept Website Terms And Conditions.</a></label>
                    <input type="submit" value="Sign up">
                </div>
            </form>
        </div>
    </div>

谁能解释一下怎么做? 干杯

您需要从 html 文件中删除标签和输入,并在 {% csrf_token %}{{form.as_p}} 之后添加此标签,这是一个开始。您还使用了旧版本的 Django,我可以说的是,当您定义 ModelForm 时,您写了 forms.ModelForm 当它已更改为 ModelForm 时,升级 write

pip install -U Django

你基本上创建了两种形式,一种只有 html,一种只有 Django 你没有将你的 ModelForm 应用到你的 html 文件,而是你只是制作了一个 html 形式html 呈现 Django ModelForm.

你已经创建了一个Form,它不是Django的表单,所以你实际上不需要在forms.py中写任何东西,因为它的目的是根据模型结构创建一个表单并执行根据定义的字段进行验证。

现在您必须从表单中获取数据并在视图中自行执行验证和检查。所以 post 将是

def post(self, request):
    email = request.POST.get('email')  # get value in name="email" field
    password = request.POST.get('password')
    repeatedpassword = request.POST.get('repeatedpassword')

    if password == repeatedpassword: # manual validation to check if both string are same
        # Other Validations code here and
        # Register or Login etc functions here

    return render(request, 'signup.html', {'form': form})