开始页面上的 Django 注册表单,没有重定向到登录页面
Posted
技术标签:
【中文标题】开始页面上的 Django 注册表单,没有重定向到登录页面【英文标题】:Django registration form on startpage, without redirect to loginpage 【发布时间】:2015-10-01 14:07:21 【问题描述】:我对 Django 很陌生,但至少具备 Python 的基础知识。今年夏天,我正在开发一个可以与 fortran 代码协同工作的 web 应用程序(希望如此)。此 fortran 代码生成数据,与注册系统一起,用户应有权访问此 fortran 代码创建的数据的数据库。
到目前为止,我有一个通用的主页模板,现在我正在尝试为主页实现一个注册按钮和登录表单。从起始页面开始,我希望用户能够按下注册按钮,被重定向到一个表单,该表单要求提供一些基本信息,例如姓名、电子邮件等。然后他们会收到一封确认电子邮件,并通过点击一个链接,该帐户应该是活性。 在它旁边,登录按钮应该有他们的用户名(电子邮件)和密码字段。如果用户名/密码错误,它应该添加一条说明用户名/密码错误但不重定向到任何其他页面的文本。
现在我只处理登录部分。我遇到的问题是该页面仅显示登录按钮,而不是填写用户名和密码的字段。
这是我的base.html的设置
<div class="page-header">
% if not user.is_authenticated %
<h1>Hello and welcome to my code!</h1>
<div class="right">
% if form.errors %
<p>Your username and password didn't match. Please try again.</p>
% endif %
<form>
% csrf_token %
<table>
<tr>
<td> form.username.label_tag </td>
<td> form.username </td>
</tr><tr>
<td> form.password.label_tag </td>
<td> form.password </td>
</tr>
</table>
<input type="submit" value="login" />
<input type="hidden" name="next" value="next"/>
关于注册过程和用户处理,Django 1.8+ 首选哪个应用程序?听说 django-registration 不再更新了,django-registration-redux 因为报错而无法上班:
django.core.exceptions.AppRegistryNotReady:模型尚未加载。
我似乎无法使用通常建议的解决方案来解决。 Allauth 我试过潜入其中,但我想也许我可以从这里的建议中找到更好的选择。
非常感谢您的帮助!
【问题讨论】:
请问您为什么要尝试使用应用程序进行注册?您可以轻松创建注册表单和登录/注销视图。 表单看起来并不那么简单,在 django-registration-redux 的示例中,它看起来很简单,似乎已经为处理用户、注册和登录做好了一切准备。我该如何使用注册表单呢? 我在我的项目中编写了一个应用程序来完成这一切。看看,并随意使用代码(AGPL 许可证)gitlab.com/Pacodastre/Berou/tree/master/berou/accounts 【参考方案1】:urls.py
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^register/$', views.Register, name='register'),
url(r'^login/$', views.Login, name='login'),
url(r'^logout/$', views.Logout, name='logout'),
]
register.html
<form method="post" action="">
% csrf_token %
<input type="text" name="username" placeholder="Username"/>
<input type="text" name="first_name" placeholder="First Name"/>
<input type="text" name="last_name" placeholder="Last Name"/>
<input type="text" name="email" placeholder="Email Address"/>
<input type="password" name="password" placeholder="Password"/>
<input type="submit" value="Register"/>
</form>
login.html
<form method="post" action="">
% csrf_token %
<input type="text" name="username" placeholder="Username"/>
<input type="password" name="password" placeholder="Password"/>
<input type="submit" value="Login"/>
</form>
views.py
def Register(request):
if request.method == "POST":
username = request.POST['username']
fname = request.POST['first_name']
lname = request.POST['last_name']
email = request.POST['email']
password = request.POST['password']
u = User.objects.create_user(username, email, password, first_name=fname, last_name=lname)
u.save()
return HttpResponse("Registration complete! Please head over to the <a href='/login/'>login page</a> to start using your website.")
return render(request, "app/register.html", )
def Login(request):
if request.method == "POST":
mobile = request.POST['username']
password = request.POST['password']
user = authenticate(username=username, password=password)
if user is not None:
if user.is_authenticated:
login(request, user)
return HttpResponseRedirect('/home/')
else:
return HttpResponse("This user is not active. Please contact support@company.com")
else:
return HttpResponseRedirect('/login/')
return render(request, "app/login.html", )
def Logout(request):
logout(request)
return HttpResponseRedirect('/login/')
我所有的模板(html 文件)都在我的 app 文件夹中。出于此答案的目的,我们假设该应用程序名为 app
。所以文件夹结构将是app/templates/app/
,然后是模板文件register.html
、login.html
。这是我从事的一个项目的精简版。希望这可以帮助。我从 Mike Hibbert 的 YouTube 频道学习了这种注册和登录方法。搜索并观看他的视频。
附:如果您可以登录,它将带您到 localhost:8000/home/ 但我没有在此处提供 url 或视图。自己做一个。
【讨论】:
以上是关于开始页面上的 Django 注册表单,没有重定向到登录页面的主要内容,如果未能解决你的问题,请参考以下文章