Python 在Django中使用另一个项目的html表单
我正试图用Django使用来自互联网的html表单。然而,在youtube上看了大量视频并通读之后,我无法让它正常工作。当我点击submit按钮时,Chrome会告诉我“表单已提交”,但没有其他事情发生。它应该让用户登录并重定向到索引页面 注册表单.htmlPython 在Django中使用另一个项目的html表单,python,django,forms,Python,Django,Forms,我正试图用Django使用来自互联网的html表单。然而,在youtube上看了大量视频并通读之后,我无法让它正常工作。当我点击submit按钮时,Chrome会告诉我“表单已提交”,但没有其他事情发生。它应该让用户登录并重定向到索引页面 注册表单.html <div class="panel panel-info mt10 br-n bg-gradient-1 mw500 mauto"> <form id="contact" method="
<div class="panel panel-info mt10 br-n bg-gradient-1 mw500 mauto">
<form id="contact" method="post" action="{% url 'feed:connection' %}">
{% csrf_token %}
{{ form.non_field_errors }}
<div class="panel-body text-center p50 text-center">
<div class="section">
<p class="text-uppercase text-white ls100 fw700">Username</p>
{{ form.username.errors }}
<label for="username" class="field prepend-icon">
<input id="username" type="text" name="username" placeholder="Enter username" class="gui-input">
</label>
</div>
<div class="section">
<p class="text-uppercase text-white ls100 fw700">Password</p>
{{ form.password.errors }}
<label for="password" class="field prepend-icon">
<input id="password" type="password" name="password" placeholder="Enter password" class="gui-input">
</label>
</div>
<div class="panel-footer clearfix p10 ph15">
<button type="submit" class="button btn-primary mr10 pull-right text-uppercase text-white ls100 fw700">Sign In</button>
<!--<label class="switch ib switch-primary pull-left input-align mt10">
<input id="remember" type="checkbox" name="remember" checked="">
<label for="remember" data-on="YES" data-off="NO"></label> <span>Remember me</span>
</label> -->
</div>
<div class="section text-left pt20 pb10"><a href="#">Forget password?</a>
<p><span class="text-white">Haven't yet registration? <a href="#">Sign up here</a></span></p>
</div>
<div class="section row">
<div class="col-md-6"><a href="#" class="fw700 ls100 text-white text-uppercase">Facebook</a></div>
<div class="col-md-6"><a href="#" class="fw700 ls100 text-white text-uppercase">Google +</a></div>
</div>
</div>
</form>
</div>
url.py
from django.views.generic.base import TemplateView
from django.shortcuts import render, redirect
from django.contrib.auth import authenticate, login
from django.views.generic import View
from .forms import LoginForm
# Pour faire afficher la page index
class IndexView(TemplateView):
template_name = 'feed/index.html'
# Pour se logger
class UserFormView(View):
form_class = LoginForm
template_name = 'feed/registration_form.html'
# display blank form
def get(self, request):
form = self.form_class(None)
return render(request, self.template_name, {'form': form})
# process form data
def post(self, request):
form = self.form_class(request.POST)
if form.is_valid():
user = form.save(commit=False)
# cleaned (normalized) data
username = form.cleaned_data['username']
password = form.cleaned_data['password']
user.set_password(password)
user.username = username
user.save()
# returns User objects if credentials are correct
user = authenticate(username=username, password=password)
if user is not None:
if user.is_active:
login(request, user)
return redirect('feed:index')
return render(request, self.template_name, {'form': form})
from django.conf.urls import url, include
from . import views
app_name = "feed"
urlpatterns = [
# /feed/
url(r'^$', views.IndexView.as_view(), name='index'),
# /register/
url(r'^connection/$', views.UserFormView.as_view(), name='connection'),
]
from django import forms
class LoginForm(forms.Form):
user = forms.CharField(max_length=100)
password = forms.CharField(widget=forms.PasswordInput, min_length=8)
forms.py
from django.views.generic.base import TemplateView
from django.shortcuts import render, redirect
from django.contrib.auth import authenticate, login
from django.views.generic import View
from .forms import LoginForm
# Pour faire afficher la page index
class IndexView(TemplateView):
template_name = 'feed/index.html'
# Pour se logger
class UserFormView(View):
form_class = LoginForm
template_name = 'feed/registration_form.html'
# display blank form
def get(self, request):
form = self.form_class(None)
return render(request, self.template_name, {'form': form})
# process form data
def post(self, request):
form = self.form_class(request.POST)
if form.is_valid():
user = form.save(commit=False)
# cleaned (normalized) data
username = form.cleaned_data['username']
password = form.cleaned_data['password']
user.set_password(password)
user.username = username
user.save()
# returns User objects if credentials are correct
user = authenticate(username=username, password=password)
if user is not None:
if user.is_active:
login(request, user)
return redirect('feed:index')
return render(request, self.template_name, {'form': form})
from django.conf.urls import url, include
from . import views
app_name = "feed"
urlpatterns = [
# /feed/
url(r'^$', views.IndexView.as_view(), name='index'),
# /register/
url(r'^connection/$', views.UserFormView.as_view(), name='connection'),
]
from django import forms
class LoginForm(forms.Form):
user = forms.CharField(max_length=100)
password = forms.CharField(widget=forms.PasswordInput, min_length=8)
代码有什么问题?谢谢您的时间。接收登录表单的
IndexView
没有代码来处理它。@klauds。这是对的。表单/
中的操作指向IndexView。根据您的观点,您的操作应该是/connection/
,因为这是处理表单处理的操作。哇,谢谢你们的回答,速度非常快!因此,我将action=“/”更改为action=“/connection/”。但是,pyCharm给了我一个错误:“无法解析目录‘连接’。我应该更改什么?使用反向,即{%url’提要:连接“%”作为操作值。我将feed
作为应用程序的名称。你是对的,提要是应用程序的名称。因此我将其更改为action=“{%url”提要:连接“%”,pyCharm不再给我一个错误。但是,Chrome再次告诉我“您的表单已提交”,而没有其他事情发生。我才意识到。在PyCharm的控制台中,当我运行服务器时,当我点击submit按钮时,我不会收到任何帖子,即使Chrome告诉我它已经提交了。可能是什么?