美文网首页
Django快速入门8用户验证-报纸应用

Django快速入门8用户验证-报纸应用

作者: python测试开发 | 来源:发表于2021-07-23 17:37 被阅读0次

    现在我们有了有效的自定义用户模型,我们可以添加每个网站需要的功能:注册、登录和注销用户的能力。 Django 提供了我们登录和注销所需的一切,但我们需要创建自己的表单来注册新用户。我们还将构建基本主页,其中包含指向所有三个功能的链接,因此我们不必每次都手动输入 URL。

    模板

    $ mkdir -p templates/registration
    

    config/settings.py

    # config/settings.py
    TEMPLATES = [
        {
            ...
            'DIRS': [str(BASE_DIR.joinpath('templates'))],
            ...
        }
    ]
    ...
    LOGIN_REDIRECT_URL = 'home' # new
    LOGOUT_REDIRECT_URL = 'home' # new
    

    templates/base.html

    <!-- templates/base.html -->
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="utf-8">
      <title>{% block title %}Newspaper App{% endblock title %}</title>
    </head>
    <body>
      <main>
        {% block content %}
        {% endblock content %}
      </main>
    </body>
    </html>
    

    templates/home.html

    <!-- templates/home.html -->
    {% extends 'base.html' %}
    
    {% block title %}Home{% endblock title %}
    
    {% block content %}
    {% if user.is_authenticated %}
      Hi {{ user.username }}!
      <p><a href="{% url 'logout' %}">Log Out</a></p>
    {% else %}
      <p>You are not logged in</p>
      <a href="{% url 'login' %}">Log In</a> |
      <a href="{% url 'signup' %}">Sign Up</a>
    {% endif %}
    {% endblock content %}
    

    templates/registration/login.html

    <!-- templates/registration/login.html -->
    {% extends 'base.html' %}
    
    {% block title %}Log In{% endblock title %}
    
    {% block content %}
    <h2>Log In</h2>
    <form method="post">
      {% csrf_token %}
      {{ form.as_p }}
      <button type="submit">Log In</button>
    </form>
    {% endblock content %}
    

    templates/registration/signup.html

    <!-- templates/registration/signup.html -->
    {% extends 'base.html' %}
    
    {% block title %}Sign Up{% endblock title %}
    
    {% block content %}
    <h2>Sign Up</h2>
    <form method="post">
      {% csrf_token %}
      {{ form.as_p }}
      <button type="submit">Sign Up</button>
    </form>
    {% endblock content %}
    

    URL

    config/urls.py

    # config/urls.py
    from django.contrib import admin
    from django.urls import path, include # new
    from django.views.generic.base import TemplateView # new
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('accounts/', include('accounts.urls')), # new
        path('accounts/', include('django.contrib.auth.urls')), # new
        path('', TemplateView.as_view(template_name='home.html'),
          name='home'), # new  
    ]
    

    accounts/urls.py

    # accounts/urls.py
    from django.urls import path
    from .views import SignUpView
    
    urlpatterns = [
        path('signup/', SignUpView.as_view(), name='signup'),
    ]
    

    accounts/views.py

    # accounts/views.py
    from django.urls import reverse_lazy
    from django.views.generic import CreateView
    from .forms import CustomUserCreationForm
    
    
    class SignUpView(CreateView):
        form_class = CustomUserCreationForm
        success_url = reverse_lazy('login')
        template_name = 'registration/signup.html'
    

    管理页面

    accounts/forms.py

    # accounts/forms.py
    from django import forms
    from django.contrib.auth.forms import UserCreationForm, UserChangeForm
    
    from .models import CustomUser
    
    
    class CustomUserCreationForm(UserCreationForm):
    
        class Meta(UserCreationForm):
            model = CustomUser
            fields = ('username', 'email', 'age',) # new
    
    
    class CustomUserChangeForm(UserChangeForm):
    
        class Meta:
            model = CustomUser
            fields = ('username', 'email', 'age',) # new
    

    注册用户testuser后登录

    访问http://127.0.0.1:8000/admin会提示没有权限。

    结论

    到目前为止,我们的 Newspaper 应用程序有一个自定义用户模型和工作注册、登录和注销页面。但是您可能已经注意到我们的网站看起来不太好。在下一章中,我们将为样式添加 Bootstrap 并创建专用的页面应用程序。

    相关文章

      网友评论

          本文标题:Django快速入门8用户验证-报纸应用

          本文链接:https://www.haomeiwen.com/subject/gpecmltx.html