简单的博客登录注册页面
一、项目的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"]