Получение данных из html-формы в django

Я создал одну html-форму для своего веб-приложения. Теперь я хочу получить данные для дальнейшей проверки при отправке формы в DJANGO. Как я могу это сделать? Ниже я приложил код html-формы. На самом деле я могу получить данные методом request.POST.get('имя_поля'), но я хочу получить данные в одном объекте. Также я хочу создать отдельный файл python для валидации. Как я могу перенаправить данные на этот файл?

Сделайте Django форму в бэкенде, например, форма входа имеет поля имени пользователя и пароля. Не используйте ее во фронтенде Просто сделайте свою собственную форму во фронт-энде с полями имени пользователя и пароля. Django, конечно, не может определить, отправлены ли данные из формы Django или из пользовательской формы. Поэтому он будет обрабатывать их нормально

Например

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

Теперь в бэкенде

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

Форме нужны только данные с именем пользователя и паролем с лицевой стороны

По поводу использования форм в Django, вот небольшая демонстрация... Вы можете создать файл в вашей папке 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

Из вашего views.py файла в той же app папке:

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>

Полагаю, вы уже знаете, как настроить url на view. В двух словах, это подход, который вы могли бы использовать.

Я рекомендую вам прочитать doc для получения дополнительной информации о формах Django.

Вернуться на верх