【问题标题】:How to integrate Django model and form with my view如何将 Django 模型和表单与我的视图集成
【发布时间】:2017-08-15 17:16:00
【问题描述】:

如何将我的 html 集成到我的表单和模型中,以便它可以处理后端。在管理页面中,一切正常,但我无法将它与我的前端集成。 这是我的models.py

from django.db import models

class SignUp(models.Model):
    name = models.CharField(max_length=120, blank=True, null=True)
    email = models.EmailField()
    timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)
    updated = models.DateTimeField(auto_now_add=False, auto_now=True)

    def __unicode__(self):
        return self.email

这是我的 forms.py

from django import forms
from .models import SignUp

class SignUpForm(forms.ModelForm):
    class Meta:
        model = SignUp
        fields = ['name', 'email']

    def clean_name(self):
        name = self.cleaned_data.get('name')

        return name 

    def clean_email(self):
        email = self.cleaned_data.get('email')

        try:
            match = SignUp.objects.get(email=email)
        except SignUp.DoesNotExist:
            return email

        raise forms.ValidationError('This email address is already subscribed.')

这是我的观点.py

from django.shortcuts import render
from django.core.mail import send_mail
from django.conf import settings 

from .forms import SignUpForm

def signUp(request):
    form = SignUpForm(request.POST or None)

    if form.is_valid():
        name = form.clean_name()
        email = form.clean_email()
        instance = form.save()

        subject = 'Bruke Church news'
        from_email = settings.EMAIL_HOST_USER
        to_email = [email]
        contact_message = "%s:Thank you for signing up for our newsletter via %s. we'll be in touch" %( 
                                        name,
                                         email)

        send_mail (subject, 
                            contact_message, 
                            from_email, 
                            to_email,
                            fail_silently=False)


    context = {
        "form": form
    }


    return render(request, "signUp.html",context)

这是我的 html 文件

<div class="col-md-5">
              <div class="row">
                <div class="col-md-7">
                  <font color="#4C194C">Newsletter Sign Up</font>
                  <form action=" " method="POST">
                  {% csrf_token %}
                  <div class="form-group">
                    <input class="form-control" id="name" type="text" placeholder="Your Name *" name="name">
                  </div>
                  <div class="form-group">
                    <input class="form-control" id="email" type="email" placeholder="Your Email *" name="email">
                  </div>
                    <button class="btn btn-primary btn-sm" type="submit">Submit</button>
                  </form>
                </div>
              </div>
          </div>

感谢您的时间和精力。 注意我不想在我的 html 中使用 {{form.as_p}} 方法

【问题讨论】:

    标签: python html django django-models django-forms


    【解决方案1】:

    实话告诉你我认为你需要改进你的代码(例如模型和表单)。 为什么需要持有SignUp模型?那是另一个将保存在您的数据库中的表,您真的需要它吗? 在您的表单中,您可以使用 SignUp.objects.exists(email=email) 检查电子邮件是否存在。

        def clean_email(self):
           email = self.cleaned_data.get('email')
           match = SignUp.objects.exists(email=email)
           if not match:
               raise forms.ValidationError('This email address is already 
                                            subscribed.')
           return email
    

    最后一件事,在验证您的请求后,您可以使用参数键访问 request.data。

    【讨论】:

    • 非常感谢,我已经按照你的改进了我的代码。关于模型,我需要保存所有电子邮件以备将来使用,就像我可能希望它用于向所有人发送促销邮件一样。无论如何,谢谢,让我知道是否可以在不使用 {{form.as_p}} 的情况下将我的模型与 html 代码集成
    • @FlimonShferaw 我认为在用户模型上保存电子邮件、姓名和此类字段会更合理(重要的名称使您的代码更具可读性)。您的表单需要验证随请求发送的参数,因此您需要在处理请求时在端点中使用它(就像您在第一时间所做的那样)。您可以考虑在登录/注册后发回用户。
    猜你喜欢
    • 2018-01-26
    • 1970-01-01
    • 2022-09-28
    • 2019-08-08
    • 1970-01-01
    • 2014-04-11
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    相关资源
    最近更新 更多