如何给一个新项目添加登陆、注册、改密码、重置密码、邮件找回密码等功能?

一、把下面两个红框里的html拷贝到新项目的对应位置,一定要位置一样(具体html文件,在我的博客园文件栏目里保存),

html文件里,出现类似{% url "shop:login" %}的地方,切记,shop要换成实际项目中的应用名称。

二、settings如下设置。

shop:product_list表示登录成功后,跳转到哪个path(‘product_list/’)url地址。

shop:login表示登陆用哪个path('login/')url地址。

三、按照下方代码设置base.html

{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{% block title %}{% endblock %}</title>
    <link href="{% static "css/base.css" %}" rel="stylesheet">
</head>
<body>
    <div id="header">
        <a href="/" class="logo">My shop</a>
    </div>
    {% if request.user.is_authenticated %}
        <div id="subheader" style="margin-left: 20px">
            <div class="cart">
                Your cart is empty.
            </div>
        </div>
    {% endif %}
    <div style="margin-right: 20px">
        {% if request.user.is_authenticated %}
            Hello {{ request.user.first_name }},<a href="{% url "shop:password_change" %}">修改密码</a>
            <a href="{% url "shop:logout" %}">Logout</a>
        {% else %}
            <a href="{% url "shop:login" %}">Log-in</a>
        {% endif %}
    </div>
    <div id="content">
        {% block content%}
        {% endblock %}
    </div>
</body>
</html>

  四、在下方的forms.py文件里,粘贴下面的代码:

from django import forms
from django.contrib.auth.models import User


class LoginForm(forms.Form):
    username = forms.CharField()
    password = forms.CharField(widget=forms.PasswordInput)


class UserRegistrationForm(forms.ModelForm):
    password = forms.CharField(label='Password', widget=forms.PasswordInput)
    password2 = forms.CharField(label='Repeat password', widget=forms.PasswordInput)

    class Meta:
        model = User
        fields = ('username', 'first_name', 'email')

    def clean_password2(self):
        cd = self.cleaned_data
        if cd['password'] != cd['password2']:
            raise forms.ValidationError('Password don\'t match.')
        return cd['password2']

  五、在下方的urls.py文件,粘贴下面的代码:

from django.urls import path
from django.contrib.auth import views as auth_views
from . import views

app_name = 'shop'

urlpatterns = [
    path('login/', auth_views.LoginView.as_view(), name='login'),
    path('logout/', auth_views.LogoutView.as_view(), name='logout'),
    path('', views.product_list, name='product_list'),
    # change password urls
    path('password_change/',
         auth_views.PasswordChangeView.as_view(
            template_name='shop/password_change_form.html',
            success_url="/password_change/done/",
         ), name='password_change'),
    path('password_change/done/',
         auth_views.PasswordChangeDoneView.as_view(
            template_name='shop/password_change_done.html'
         ), name='password_change_done'),
    # reset password urls
    path('password-reset/',
         auth_views.PasswordResetView.as_view(
             template_name="shop/password_reset_form.html",
             email_template_name="shop/password_reset_email.html",
             subject_template_name="shop/password_reset_subject.txt",
             success_url="/password-reset-done/",
         ),
         name='password_reset'),
    path('password-reset-done/',
         auth_views.PasswordResetDoneView.as_view(
             template_name="shop/password_reset_done.html"
         ),
         name='password_reset_done'),
    path('password-reset-confirm/<uidb64>/<token>/',
         auth_views.PasswordResetConfirmView.as_view(
             template_name="shop/password_reset_confirm.html",
             success_url="/password-reset-complete/",
         ),
         name='password_reset_confirm'),
    path('password-reset-complete/',
         auth_views.PasswordResetCompleteView.as_view(
             template_name="shop/password_reset_complete.html"
         ),
         name='password_reset_complete'),
    path('register/', views.register, name='register'),
   
]

  六、在下方views.py文件里,粘贴下面的代码:

from django.shortcuts import render, get_object_or_404
from .models import Category, Product
from cart.forms import CartAddProductForm
from django.contrib.auth.decorators import login_required
from .forms import UserRegistrationForm


def register(request):
    if request.method == 'POST':
        user_form = UserRegistrationForm(request.POST)
        if user_form.is_valid():
            # 创建一个新的用户对象,但要避免保存它
            new_user = user_form.save(commit=False)
            # 设置选择的密码
            new_user.set_password(user_form.cleaned_data['password'])
            # 保存用户对象
            new_user.save()
            return render(request, 'shop/register_done.html', {'new_user': new_user})
    else:
        user_form = UserRegistrationForm()
    return render(request, 'shop/register.html', {'user_form': user_form})


@login_required
def product_list(request, category_slug=None):
    # .........


@login_required
def product_detail(request, id, slug):
    # ........

  

猜你喜欢

转载自www.cnblogs.com/tuobei/p/12509612.html