在起始页面上实现Django注册表单,无需重定向到登录页面

3
我对Django还很陌生,但至少掌握了Python的基础知识。暑假期间,我正在开发一个Web应用程序,希望它能与Fortran代码协同工作(希望如此)。该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: Models aren't loaded yet.”,我无法通过通常建议的解决方案来修复它。我尝试了Allauth,但我想也许我可以从这里的建议中找到更好的替代方案。非常感谢您提前的帮助!

请问为什么要使用应用程序进行注册?您可以轻松地创建注册表单和登录/注销页面。 - MiniGunnR
表单看起来并不是那么容易,而在django-registration-redux的示例中,它似乎已经准备好了处理用户、注册和登录的所有内容。 如果要使用注册表单,我该怎么做? - Frank
我在我的项目中编写了一个应用程序,可以完成所有这些操作。请查看并随意使用代码(AGPL许可证)https://gitlab.com/Pacodastre/Berou/tree/master/berou/accounts - Paco
1个回答

0

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/templates/app/,然后是模板文件register.htmllogin.html。这是我工作过的项目的简化版本。希望这对你有所帮助。我从Mike Hibbert的YouTube频道中学习了这种注册和登录方法。搜索并观看他的视频。

P.S. 如果您可以使登录项正常工作,它将会带您进入 localhost:8000/home/,但我没有在这里提供URL或视图。请自行创建。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接