簡體   English   中英

在 django 中獲取 html 表單數據

[英]Fetching html form data in django

我為我的 Web 應用程序創建了一個 html 表單。 現在我想獲取數據以進一步驗證在 DJANGO 中提交表單。 那么我該怎么做。 我在下面附上了我的 html 表單代碼。 實際上,我可以通過 request.POST.get('field_name') 方法獲取數據,但我想在單個對象中獲取數據。 我還想創建單獨的 python 文件進行驗證。 那么如何重定向該文件。

<form action="/contact_form_data_insert" name = "contact_us_form" id = "contact_us_form" method="POST">
    <div class="bg-transperent container mt-6">
        <div class="bg-transperent container">
            <div class="row bg-transperent">

                <div class="col-lg-6 bg-transperent contact_field">
                    <div class="form-outline my-2 px-2" >
                      <input type="text" id="contact_name" name="contact_name" class="form-control form-control-lg-border-0" placeholder = "Your Name"/>
                    </div>
                </div>


                <div class="col-lg-6 bg-transperent contact_field">
                    <div class="form-outline my-2 px-2" >
                      <input type="text" id="contact_company" name="contact_company" class="form-control form-control-lg-border-0" placeholder = "Your Company" />
                    </div>
                </div>
            </div>


            <div class="row bg-transperent">

                <div class="col-lg-6 bg-transperent contact_field">
                    <div class="form-outline my-2 px-2" >
                      <input type="tel"  id="contact_phone_number" name="contact_phone_number" class = "form-control form-control-lg-border-0" placeholder = "Phone Number">
                    </div>
                </div>


                <div class="col-lg-6 bg-transperent contact_field">
                    <div class="form-outline my-2 px-2" >
                      <input type="email" id="contact_email" name="contact_email" class="form-control form-control-lg-border-0" placeholder = "Email"/>
                    </div>
                </div>
            </div>
        </div>




        <div class="bg-transperent container">
            <div class="row">
                    <div class="col-12 bg-transperent contact_field ">
                        <div class="form-outline my-2 px-2" >
                          <input type="text" id="contact_subject" name = "contact_subject" class="form-control form-control-lg-border-0" placeholder = "Subject" />
                        </div>
                    </div>
            </div>
           
        </div>


        <div class="bg-transperent container">
            <div class="row">
                    <div class="col-12 bg-transperent contact_field">
                        <div class="form-outline my-2 px-2" >
                            <textarea class="form-control form-control-lg-border-0" id="contact_question" name="contact_question" placeholder = "Your Question" rows="5"></textarea>
                        </div>
                    </div>
            </div>
        </div>

        <div class="container bg-transperent">
            <div class="row">
                <div class="col-lg-2 px-4">
                    <input type="submit" class = "btn btn-info btn-lg btn-block"style="color: white;font-family: serif; font-weight: bolder; "  value="SEND">
                </div>
            </div>
        </div>

        
    </div>
</form>

在后端制作 Django 表單,例如登錄表單有用戶名和密碼字段 不要在前面使用它只需在前端制作自己的表單,其中包含名為用戶名和密碼的字段 Django 當然無法判斷發送的數據是否來自Django表單或自定義表單所以它會正常對待它

例如

class LoginForm(Form):
 username = ...
 password = ...
 class Meta:
   fields = ('username', 'password')

現在在后台

form = LoginForm (request.POST)
if form.is_valid():

表單只需要來自前端的名為用戶名和密碼的數據

關於使用Django forms ,這里有一個快速演示......您可以在您的app文件夾中創建一個名為forms.py的文件,並將以下內容放入其中。

from django import forms

class ContactForm(forms.Form):  
     # You can also modify the field attributes from here if you wish to
     contact_name = forms.CharField(widget=forms.TextInput(attrs={'id':'contact_name', 'name': 'contact_name', 'class': 'form-control form-control-lg-border-0', 'placeholder': 'Your Name'}))

     # You can take the same approach for the other text & email input fields below
     contact_company = forms.CharField(widget=forms.TextInput(attrs={...}))
     contact_phone_number = forms.CharField(widget=forms.TextInput(attrs={...}))
     contact_subject = forms.CharField(widget=forms.TextInput(attrs={...}))
     contact_email = forms.EmailField(widget=forms.EmailInput(attrs={...}))

     # Textarea field
     contact_question = forms.CharField(widget=forms.Textarea(attrs={'id':'contact_question', 'name': 'contact_question', 'class': 'form-control form-control-lg-border-0','placeholder': 'Your Question', 'rows': '5'}))

     # Can create any method in here to handle a specific process if the form is valid
     def save(self):
         pass

從同一app文件夾中的views.py文件中:

from .forms import ContactForm  # Importing the custom form you created

# Now let's say I want to pass it to a specific view to allow a user to submit his/her information...
def contact_form_view(request):
     if request.method == 'POST':
          form = ContactForm(data=request.POST)

          if form.is_valid():
               # Do something here to process and save the form data
               form.save()
          else:
               print(form.errors)
     else:
          form = ContactForm()
     
     return render(request, 'contact_form.html', {'form': form})

現在,在您的html模板中,您可以將相應的input字段替換為form object字段。 例如:

<form method="POST" ...>
     # Where you have these fields
     <input type="text" id="contact_name" name="contact_name" class="form-control form-control-lg-border-0" placeholder = "Your Name"/>

     # Just replace with... (i.e.: contact_name as above)
     {{ form.contact_name }}

     # Apply the above with the other respective fields.
</form>

我相信您已經知道如何設置viewurl 簡而言之,這是您可以采取的方法。

不過,我確實建議您閱讀文檔以獲取有關 Django 表單的更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM