Метод get не меняется на post в формах django
И я изучал Django в течение 3 месяцев, но все еще не смог найти решение ниже. Я создаю онлайн сайт по составлению резюме. Но когда я запускаю функцию в views.py, я получаю метод 'GET' каждый раз, но я ожидал, что это должен быть POST, я думаю, что есть проблема с фронтендом. У меня есть замечательное приложение Nicepage, которое генерирует красивые html-коды для меня без кодирования. Я скачал его исходный код и использовал его в качестве фронтенда для своего сайта. Не знаю почему, но я так и не смог решить эту проблему. Не могли бы вы помочь мне решить эту проблему?
вот мой фронтенд:
urls.py
from django.urls import path
from .views import (
index,
start_building,
template_choice,
testing,
work_experience,
education,
skills_summary
)
prefix = 'v1/requests/'
urlpatterns = [
path("", index, name="homepage"),
path("test/", testing, name="testing"),
path(prefix + "education/", education, name="education"),
path(prefix + "skills_summary/", skills_summary, name="finish"),
path(prefix + "work_experience/", work_experience, name="work_experience"),
path(prefix + "template_choice/", template_choice, name="template"),
path(prefix + "starter/", start_building, name="start_process"),
]
views.py
from django.shortcuts import render
from .forms import PersonalDetailsForm, SingleForm
from django.http import HttpResponseRedirect
personal_details = []
def index(request):
a = "We have got more than 50000 users used our website!"
return render(request, "Home.html", {"a": a})
def template_choice(request):
return render(request, "template_choice.html", {})
def start_building(request):
print("[INFO]: function start__building is working!")
form = PersonalDetailsForm(request.POST)
print(request.method)
if request.method == "POST":
print(True)
if form.is_valid():
fullname = form.cleaned_data["fullname"]
print(fullname)
return render(request, "Page-1.html", {"form": form})
def work_experience(request):
return render(request, "Page-2.html", {})
def education(request):
return render(request, "education.html", {})
def skills_summary(request):
return render(request, "skills_summary.html", {})
def testing(request):
form = PersonalDetailsForm(request.POST)
if request.method == "POST":
if form.is_valid():
data = form.cleaned_data["fullname"]
print(data)
return render(request, "formsets.html", {"form": form})
def work_experience(request):
return render(request, "Page-2.html", {})
def education(request):
return render(request, "education.html", {})
def skills_summary(request):
return render(request, "skills_summary.html", {})
def testing(request):
form = PersonalDetailsForm(request.POST)
if request.method == "POST":
if form.is_valid():
data = form.cleaned_data["fullname"]
print(data)
return render(request, "formsets.html", {"form": form})
forms.py
from django import forms
class SingleForm(forms.Form):
single = forms.CharField(required=False)
class MyForm(forms.Form):
original_field = forms.CharField()
extra_field_count = forms.CharField(widget=forms.HiddenInput())
def __init__(self, *args, **kwargs):
extra_fields = kwargs.pop('extra', 0)
super(MyForm, self).__init__(*args, **kwargs)
self.fields['extra_field_count'].initial = extra_fields
for index in range(int(extra_fields)):
# generate extra fields in the number specified via extra_fields
self.fields['extra_field_{index}'.format(index=index)] = \
forms.CharField()
class PersonalDetailsForm(forms.Form):
fullname = forms.CharField(
max_length=50,
required=False,
widget=forms.TextInput(
attrs={
"class": "u-border-1 u-border-grey-30 u-input u-input-rectangle uwhite",
"placeholder": "Enter your fullname carefully...",
"id": "name-86ce",
}
)
)
Может быть, это поможет
#you are putting POSTinfo into form before checking method
#Try the following example instead
def start_building(request)
form = PersonalDetailsForm() #Not putting the data into it
if request.method == 'POST':
form = PersonalDetailsForm(request.POST) #put the data into it only if method is post
#OTHER STUFF
Там в html-форме
Before
</form>
тег в нижних строках добавить следующее
<input type="submit" value="theTextYouWant">