简单的博客登录注册页面

一、项目的urls文件

from django.contrib import admin
from django.urls import path,include
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    path('admin/', admin.site.urls),
    path('users/', include("users.urls")), #定义子路由
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

二、APP的urls文件

from django.urls import path
from . import views

app_name = "users"
urlpatterns = [
    path("login", views.login_view, name="login")
]

三、APP的views文件

from django.shortcuts import render,HttpResponse,redirect
from django.contrib.auth import authenticate,login
from .froms import LoginForm,RegisterForm
# Create your views here.
def login_view(request):
    if request.method != "POST":
        form = LoginForm()
    else:
        form = LoginForm(request.POST)
        if form.is_valid():
            username = form.cleaned_data["username"]
            password = form.cleaned_data["password"]
            user = authenticate(request, username=username, password=password)
            if user is not None:
                login(request, user)
                # return HttpResponse("登录成功啦,哈哈哈")
                return redirect("/admin")
            else:
                return HttpResponse("失败了,请修改账户或者密码")
    context = {"form":form}
    return render(request, "users/login.html",context)

def register(request):
    if request.method != "POST":
        form = RegisterForm()
    else:
        print("开始注册流程")
        form = RegisterForm(request.POST)
        if form.is_valid():
            new_user = form.save(commit=False)
            new_user.set_password(form.cleaned_data.get("password"))
            new_user.save()
            return HttpResponse("注册成功啦")
    context = {"form": form}
    return render(request=request, template_name="users/register.html",
                  context=context)

 

四、APP的templates文件以及static样式文件

注意:static和templates目录下面的文件夹名称需要与APP名称一致

定义基础模板

 

<!DOCTYPE html>
{% load static %}
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    {% block head %}
    <title>登录页面</title>
    {% endblock head %}
    <link rel="stylesheet" href="{% static 'users/bulma.css' %}">
</head>
<body>
    <div class="container">
        {% block content %}
        {% endblock content %}
    </div>
</body>
</html>

 

继承模板的登录HTML

{% extends "users/base.html" %}

{% block head %}
    <title>登录页面</title>
{% endblock head %}
{% block content %}
    <div class="box">
        <h1 class="is-uppercase has-text-centered has-text-weight-bold is-size-2">欢迎登录博客
            <br><span class="tag">登录</span>
        </h1>
        <hr class="dropdown-divider">
        <form action="" method="POST">
        {% csrf_token %}
        {{ form.as_p }}
        <input type="submit" style="margin-top: 1em;" class="button is-link is-fullwidth" value="提交">
        </form>
    </div>
{% endblock content %}

继承模板的注册HTML

<!DOCTYPE html>
{% extends "users/base.html" %}
{% block head %}
    <title>注册页面</title>
{% endblock head %}
{% block content %}
    <div class="box">
        <h1 class="is-uppercase has-text-centered has-text-weight-bold is-size-2">欢迎登录博客
            <br><span class="tag">开始注册</span>
        </h1>
        <hr class="dropdown-divider">
        <form action="" method="POST">
        {% csrf_token %}
        {{ form.as_p }}
        <input type="submit" style="margin-top: 1em;" class="button is-link is-fullwidth" value="提交注册信息">
        </form>
    </div>
{% endblock content %}

 

 

五、APP下面独立的froms文件

from  django import forms
from django.contrib.auth.models import User
class LoginForm(forms.Form):
    username = forms.CharField(label="用户名", max_length=32, widget=forms.TextInput(attrs={
        "class": "input",
        "placeholder": "请输入用户名/邮箱登录"
    }))
    password = forms.CharField(label="密码", min_length=6, widget=forms.PasswordInput(attrs={
        "class": "input",
        "placeholder": "请输入密码"
    }))
    def clean_password(self):
        username = self.cleaned_data.get("username")
        password = self.cleaned_data.get("password")
        if username == password:
            raise forms.ValidationError("用户名和密码不能相同")
        return password

class RegisterForm(forms.ModelForm):
    """
    注册流程
    """
    #定义密码输入框,不显示铭文
    username = forms.CharField(label="用户名", min_length=66, widget=forms.TextInput(
                attrs={
                    "class": "input",
                    "placeholder": "用户名"
                }
                ))
    password = forms.CharField(label="密码",
                               min_length=6,
                               widget=forms.PasswordInput(
                                   attrs={
                                       "class": "input",
                                       "placeholder": "输入密码"
                                   }
                               ))
    password2 = forms.CharField(label="再次输入密码",
                               min_length=6,
                               widget=forms.PasswordInput(
                                   attrs={
                                       "class": "input",
                                       "placeholder": "请再次输入密码"
                                   }
                               ))
    class Meta:
        model = User
        fields = ("username", "password")
    def clean_username(self):
        """
        验证注册用户
        """
        username = self.cleaned_data.get("username")
        exists = User.objects.filter(username=username).exists()
        if exists:
            raise forms.ValidationError("用户名称已存在")
        return username
    def clean_password2(self):
        """
        校验两次密码是否一致
        """
        if self.cleaned_data["password"] != self.cleaned_data["password2"]:
            raise forms.ValidationError("两次输入密码不一致!!!")
        return self.cleaned_data["password2"]

 

posted @ 2022-09-08 22:17  zwx901323  阅读(297)  评论(0)    收藏  举报