Получение данных из 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.