Python Django视图返回POST而不是GET请求
因此,我有这些使用POST请求注册和登录的工作视图,这两个请求都返回profile.html 问题是,当我提交表单(根据cmd)时,登录和注册视图会将一篇文章返回到登录或注册URL,以运行必要的功能。 这意味着它只是呈现profile.html,而不是运行其查看功能。 我如何让提交的表单发送到纵断面图,同时仍让他们为各自的功能发送帖子 视图:Python Django视图返回POST而不是GET请求,python,django,post,get,request,Python,Django,Post,Get,Request,因此,我有这些使用POST请求注册和登录的工作视图,这两个请求都返回profile.html 问题是,当我提交表单(根据cmd)时,登录和注册视图会将一篇文章返回到登录或注册URL,以运行必要的功能。 这意味着它只是呈现profile.html,而不是运行其查看功能。 我如何让提交的表单发送到纵断面图,同时仍让他们为各自的功能发送帖子 视图: def log_in(request): if request.method == 'POST': form = log_form
def log_in(request):
if request.method == 'POST':
form = log_form(request.POST)
if form.is_valid():
username = form.cleaned_data['username']
password = form.cleaned_data['password']
user = authenticate(request, username=username, password=password)
if user is not None:
print("user exists")
login(request, user)
return render(request, 'profile.html')
else:
print("user does not exist")
print(form.errors)
return render(request, 'login.html', {
'form2': log_form
})
else:
return render(request, 'login.html', {
'form2': log_form
})
else:
return render(request, 'login.html', {
'form2': log_form
})
def profile(request, username):
if request.method == 'GET':
user = Users.objects.get(username=username)
interests = []
interest_list = Interests.objects.filter(member=user)#i got 5 objs here
for i in interest_list:
interests.append(i.item)
print('added interest')
info = Bios.objects.get(author=user)
return render(request, 'profile.html', {
'user': user,
"interests": interests,
'info': info
})
urlpatterns = [
path('reg/', views.register, name='register'),
path('log/', views.log_in, name='login'),
path('profile/<str:username>/', views.profile, name='profile'),
path('feed/', views.feed, name='feed')
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
<form method='POST' action="{%url 'login' %}">
{% csrf_token %}
<p>Username: {{form2.username}}</p>
<p>Password: {{form2.password}}</p>
{{form2.errors}}
<input type="submit" value="submit">
<p style='margin-top: 10px;'>Don't have an account?<a href="{% url 'register' %}"> Register</a></p>
</form>
<form method='POST' action="{% url 'register' %}">
{% csrf_token %}
<p>Username: {{form.username}}</p>
<p>Email: {{form.email}}</p>
<p>Password: {{form.password}}</p>
<p>Phone: {{form.phone}}</p>
<p>First name: {{form.first_name}}</p>
<p>Last name: {{form.last_name}}</p>
{{form.errors}}
{% if form.errors %}
{% for field in form %}
{% for error in field.errors %}
<p>
<strong>{{ error|escape }}</strong>
</p>
{% endfor %}
{% endfor %}
{% for error in form.non_field_errors %}
<p>
<strong>{{ error|escape }}</strong>
</div>
{% endfor %}
{% endif %}
<input type='submit' value='Submit'>
<p style="margin-top: 5px;">Already have an account?<a href="{% url 'login' %}"> Log In</a></p>
</form>
URL:
def log_in(request):
if request.method == 'POST':
form = log_form(request.POST)
if form.is_valid():
username = form.cleaned_data['username']
password = form.cleaned_data['password']
user = authenticate(request, username=username, password=password)
if user is not None:
print("user exists")
login(request, user)
return render(request, 'profile.html')
else:
print("user does not exist")
print(form.errors)
return render(request, 'login.html', {
'form2': log_form
})
else:
return render(request, 'login.html', {
'form2': log_form
})
else:
return render(request, 'login.html', {
'form2': log_form
})
def profile(request, username):
if request.method == 'GET':
user = Users.objects.get(username=username)
interests = []
interest_list = Interests.objects.filter(member=user)#i got 5 objs here
for i in interest_list:
interests.append(i.item)
print('added interest')
info = Bios.objects.get(author=user)
return render(request, 'profile.html', {
'user': user,
"interests": interests,
'info': info
})
urlpatterns = [
path('reg/', views.register, name='register'),
path('log/', views.log_in, name='login'),
path('profile/<str:username>/', views.profile, name='profile'),
path('feed/', views.feed, name='feed')
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
<form method='POST' action="{%url 'login' %}">
{% csrf_token %}
<p>Username: {{form2.username}}</p>
<p>Password: {{form2.password}}</p>
{{form2.errors}}
<input type="submit" value="submit">
<p style='margin-top: 10px;'>Don't have an account?<a href="{% url 'register' %}"> Register</a></p>
</form>
<form method='POST' action="{% url 'register' %}">
{% csrf_token %}
<p>Username: {{form.username}}</p>
<p>Email: {{form.email}}</p>
<p>Password: {{form.password}}</p>
<p>Phone: {{form.phone}}</p>
<p>First name: {{form.first_name}}</p>
<p>Last name: {{form.last_name}}</p>
{{form.errors}}
{% if form.errors %}
{% for field in form %}
{% for error in field.errors %}
<p>
<strong>{{ error|escape }}</strong>
</p>
{% endfor %}
{% endfor %}
{% for error in form.non_field_errors %}
<p>
<strong>{{ error|escape }}</strong>
</div>
{% endfor %}
{% endif %}
<input type='submit' value='Submit'>
<p style="margin-top: 5px;">Already have an account?<a href="{% url 'login' %}"> Log In</a></p>
</form>
urlpatterns=[
路径('reg/',views.register,name='register'),
路径('log/',views.log_in,name='login'),
路径('profile/',views.profile,name='profile'),
路径('feed/',views.feed,name='feed')
]+静态(settings.MEDIA\u URL,document\u root=settings.MEDIA\u root)
登录表单:
def log_in(request):
if request.method == 'POST':
form = log_form(request.POST)
if form.is_valid():
username = form.cleaned_data['username']
password = form.cleaned_data['password']
user = authenticate(request, username=username, password=password)
if user is not None:
print("user exists")
login(request, user)
return render(request, 'profile.html')
else:
print("user does not exist")
print(form.errors)
return render(request, 'login.html', {
'form2': log_form
})
else:
return render(request, 'login.html', {
'form2': log_form
})
else:
return render(request, 'login.html', {
'form2': log_form
})
def profile(request, username):
if request.method == 'GET':
user = Users.objects.get(username=username)
interests = []
interest_list = Interests.objects.filter(member=user)#i got 5 objs here
for i in interest_list:
interests.append(i.item)
print('added interest')
info = Bios.objects.get(author=user)
return render(request, 'profile.html', {
'user': user,
"interests": interests,
'info': info
})
urlpatterns = [
path('reg/', views.register, name='register'),
path('log/', views.log_in, name='login'),
path('profile/<str:username>/', views.profile, name='profile'),
path('feed/', views.feed, name='feed')
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
<form method='POST' action="{%url 'login' %}">
{% csrf_token %}
<p>Username: {{form2.username}}</p>
<p>Password: {{form2.password}}</p>
{{form2.errors}}
<input type="submit" value="submit">
<p style='margin-top: 10px;'>Don't have an account?<a href="{% url 'register' %}"> Register</a></p>
</form>
<form method='POST' action="{% url 'register' %}">
{% csrf_token %}
<p>Username: {{form.username}}</p>
<p>Email: {{form.email}}</p>
<p>Password: {{form.password}}</p>
<p>Phone: {{form.phone}}</p>
<p>First name: {{form.first_name}}</p>
<p>Last name: {{form.last_name}}</p>
{{form.errors}}
{% if form.errors %}
{% for field in form %}
{% for error in field.errors %}
<p>
<strong>{{ error|escape }}</strong>
</p>
{% endfor %}
{% endfor %}
{% for error in form.non_field_errors %}
<p>
<strong>{{ error|escape }}</strong>
</div>
{% endfor %}
{% endif %}
<input type='submit' value='Submit'>
<p style="margin-top: 5px;">Already have an account?<a href="{% url 'login' %}"> Log In</a></p>
</form>
{%csrf_令牌%}
用户名:{{form2.Username}
密码:{{form2.Password}
{{form2.errors}
你没有账户吗
登记表:
def log_in(request):
if request.method == 'POST':
form = log_form(request.POST)
if form.is_valid():
username = form.cleaned_data['username']
password = form.cleaned_data['password']
user = authenticate(request, username=username, password=password)
if user is not None:
print("user exists")
login(request, user)
return render(request, 'profile.html')
else:
print("user does not exist")
print(form.errors)
return render(request, 'login.html', {
'form2': log_form
})
else:
return render(request, 'login.html', {
'form2': log_form
})
else:
return render(request, 'login.html', {
'form2': log_form
})
def profile(request, username):
if request.method == 'GET':
user = Users.objects.get(username=username)
interests = []
interest_list = Interests.objects.filter(member=user)#i got 5 objs here
for i in interest_list:
interests.append(i.item)
print('added interest')
info = Bios.objects.get(author=user)
return render(request, 'profile.html', {
'user': user,
"interests": interests,
'info': info
})
urlpatterns = [
path('reg/', views.register, name='register'),
path('log/', views.log_in, name='login'),
path('profile/<str:username>/', views.profile, name='profile'),
path('feed/', views.feed, name='feed')
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
<form method='POST' action="{%url 'login' %}">
{% csrf_token %}
<p>Username: {{form2.username}}</p>
<p>Password: {{form2.password}}</p>
{{form2.errors}}
<input type="submit" value="submit">
<p style='margin-top: 10px;'>Don't have an account?<a href="{% url 'register' %}"> Register</a></p>
</form>
<form method='POST' action="{% url 'register' %}">
{% csrf_token %}
<p>Username: {{form.username}}</p>
<p>Email: {{form.email}}</p>
<p>Password: {{form.password}}</p>
<p>Phone: {{form.phone}}</p>
<p>First name: {{form.first_name}}</p>
<p>Last name: {{form.last_name}}</p>
{{form.errors}}
{% if form.errors %}
{% for field in form %}
{% for error in field.errors %}
<p>
<strong>{{ error|escape }}</strong>
</p>
{% endfor %}
{% endfor %}
{% for error in form.non_field_errors %}
<p>
<strong>{{ error|escape }}</strong>
</div>
{% endfor %}
{% endif %}
<input type='submit' value='Submit'>
<p style="margin-top: 5px;">Already have an account?<a href="{% url 'login' %}"> Log In</a></p>
</form>
{%csrf_令牌%}
用户名:{{form.Username}
电子邮件:{{form.Email}
密码:{{form.Password}}
电话:{{form.Phone}
名字:{{form.First_name}
姓氏:{{form.Last_name}
{{form.errors}}
{%if form.errors%}
{%形式的字段为%}
{%字段中有错误。错误%}
{{error | escape}}
{%endfor%}
{%endfor%}
{%表示表单中的错误。非\u字段\u错误%}
{{error | escape}}
{%endfor%}
{%endif%}
已经有账户了吗
登录页面应该被访问两次:当用户被重定向到该页面时,使用GET;当用户发送填写好的表单时,再次使用POST。您的视图逻辑应处理两种类型的申请:
def用户登录(请求):
如有要求,请发送:
form=UserForm(request.POST)#注意,我重命名了您的表单
username=request.POST['username']
password=request.POST['password']
用户=验证(用户名=用户名,密码=密码)
如果用户不是无:
如果user.u处于活动状态:
登录(请求、用户)
返回重定向('profile',kwargs={username=user})
否则:#请求已被获取
form=UserForm()
返回呈现(请求'login.html',{'form':form})
@要求
def配置文件(请求、用户名):
user=Users.objects.get(username=username)
兴趣=兴趣.对象.过滤器(成员=用户).values\u列表('item',flat=True)
info=Bios.objects.get(author=user)
上下文={
“用户”:用户,
“利益”:利益,
“信息”:信息
}
返回呈现(请求'profile.html',上下文)
我还稍微更改了概要视图,以使用我认为是Django基于函数的视图中的最佳实践。起初,我只是接受了带有持久性问题的更干净的代码,但我刚刚意识到我可以在重定向的同时传递username参数。所以我把它进口了,现在我们好了。谢谢@beatmaister感谢您的接受!我编辑了代码来修复它。