开始页面上的 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.htmllogin.html。这是我从事的一个项目的精简版。希望这可以帮助。我从 Mike Hibbert 的 YouTube 频道学习了这种注册和登录方法。搜索并观看他的视频。

附:如果您可以登录,它将带您到 localhost:8000/home/ 但我没有在此处提供 url 或视图。自己做一个。

【讨论】:

以上是关于开始页面上的 Django 注册表单,没有重定向到登录页面的主要内容,如果未能解决你的问题,请参考以下文章

Django 会话表单(临时保存表单)

Django:登录后重定向到上一页

从 django 管理操作中间页面重定向到更改表单页面

是否可以在 Django 中重定向到没有 AJAX 的条带结帐页面?

Django 使用绑定表单重定向到另一个视图

提交表单后在 ASP.NET MVC 中。它没有重定向到其他页面。它加载相同的页面