一、基于sb-admin模板完成以下登录的逻辑

用户想要访问一个网页,首先要求注册账号,有了账号之后再去登录,才能访问网站的主页

1.先说以下用户注册的逻辑:

register 注册

form 表单保存数据到用户表

密码要加密

2.然后是登录界面

login 登录

form 表单提交数据和数据库数据校验

先校验用户是否存在

存在:校验密码

         密码正确:登录成功

         密码不正确  跳转到login登录  密码错误

不存在  跳转到login

成功:index首页

失败:login

二、实现的步骤

1、先打开你要创建的django项目,shift+右键 再此处打开命令窗口

2、激活ancanda环境

activate DjangoPath

3、创建django项目

django-admin startproject OAProject

4、创建app

切换到当前创建的项目目录下

python manage.py startapp OAProject

Jformdesigner中border怎么调_django

5、在pycharm中打开django项目,配置环境

Jformdesigner中border怎么调_python_02

6.新建文件,搭好项目结构

Jformdesigner中border怎么调_django_03

7.数据库建模

models.py

Jformdesigner中border怎么调_python_04

8.settings.py配置

配置id

Jformdesigner中border怎么调_python_05

配置app

Jformdesigner中border怎么调_python_06

配置templates路径

Jformdesigner中border怎么调_html_07

配置语言,时区

Jformdesigner中border怎么调_html_08

配置state路径

Jformdesigner中border怎么调_数据库_09

9.数据库同步

方式一:
python manage.py check django校验

python manage.py makemigrations 数据库语句生成

python manges.py migrate 数据库同步

方式二:

Jformdesigner中border怎么调_python_10

Jformdesigner中border怎么调_数据库_11

Jformdesigner中border怎么调_数据库_12

10.测试一下index.html网站主页

views.py

Jformdesigner中border怎么调_python_13

urls.py

Jformdesigner中border怎么调_html_14

因为此时,除了html的文件都被我们移动到了static下面,所以此时的路径都得变,在html的开头加载上static

{% load static %}

Jformdesigner中border怎么调_数据库_15

类似于这样的也都要加上static标签

运行服务器:

11.注册界面

register.html

前端界面同样要加载static, {% load static %}

其他路径变了的都加上{% static ’ ’ %}

表单的method是post,记得要写{% csrf_token %}

Jformdesigner中border怎么调_数据库_16

因为数据库只有三个字段,用户名,邮箱,密码,所以表单就写三个就行

Jformdesigner中border怎么调_html_17

views.py register

注册的时候,在前端输入密码,经过加密之后保存到数据库中

在这里插入代码片
```import hashlib
 
def setPassword(password):
    """
    加密密码,算法单次md5
    :param apssword: 传入的密码
    :return: 加密后的密码
    """
    md5 = hashlib.md5()
    md5.update(password.encode())
    password = md5.hexdigest()
    return str(password)
 
 
from django.shortcuts import render
from OAUser.models import OAUser
from django.shortcuts import HttpResponseRedirect
 
def register(request):
    if request.method=="POST" and request.POST:
        data=request.POST
        username=data.get("username")
        email=data.get("email")
        password=data.get("password")
        OAUser.objects.create(
            username=username,
            email=email,
            password=setPassword(password),
        )
        return HttpResponseRedirect('/login/')
    return render(request,"register.html")



 urls.py

```python
path('register/',register),
path('login/',login),

启动服务器:

Jformdesigner中border怎么调_python_18

12.登录界面 login

login.html

前端界面同样要加载static, {% load static %}

其他路径变了的都加上{% static ’ ’ %}

表单的method是post,记得要写{% csrf_token %}

views.py
def login(request):
    if request.method == 'POST' and request.POST:
        email = request.POST.get("email")
        password = request.POST.get("password")
        e = OAUser.objects.filter(email=email).first()
        if e:
            now_password = setPassword(password)
            db_password = e.password
            if now_password == db_password:
                response = HttpResponseRedirect('/index/')
                response.set_cookie("username", e.username)
                return response
     return render(request, "login.html")
urls.py

Jformdesigner中border怎么调_python_19

启动服务器运行

Jformdesigner中border怎么调_django_20

输入邮箱,密码,点击登录,如果邮箱,密码正确,就会进入登录

13.登出界面(退出登录)logout
点击退出界面,就会进入登录界面

views.py
def logout(request):
    response=HttpResponseRedirect('/login/')
    response.delete_cookie("username")
    return response
urls.py

Jformdesigner中border怎么调_python_21

12.限制登录,只有登录的用户才能访问网站主页

views.py

使用装饰器

def userValid(fun):
    def inner(request,*args,**kwargs):
        username=request.COOKIES.get("username")
        if username:
            return fun(request,*args,**kwargs)
        else:
            return HttpResponseRedirect('/login/')
    return inner
 
@userValid
 
def index(request):
    return render(request, "index.html")

启动服务器