python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Django制作注册登录系统

Django制作简易注册登录系统的实现示例

作者:paul_chen21

本文介绍了如何使用Django搭建一个简易的注册登录系统,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

前言

Django手搭简易的注册登录,不使用django.contrib.auth

一、Django是什么?

Django 最初被设计用于具有快速开发需求的新闻类站点,目的是要实现简单快捷的网站开发。采用MTV架构(Model,Template,View)。
说明文档

二、建立Django项目

1.新建项目

在这里插入图片描述

选择Django新建项目

基本环境

asgiref==3.8.0
async-timeout==4.0.3
cffi==1.16.0
cryptography==42.0.5
Django==5.0.3
django-redis==5.4.0
et-xmlfile==1.1.0
fuzzywuzzy==0.18.0
jieba==0.42.1
numpy==1.26.4
openpyxl==3.1.2
pandas==2.2.1
pillow==10.3.0
pycparser==2.21
PyMySQL==1.1.0
python-dateutil==2.9.0.post0
pytz==2024.1
redis==5.0.3
six==1.16.0
sqlparse==0.4.4
typing_extensions==4.10.0
tzdata==2024.1
zhon==2.0.2

2.需要安装的包

pip install django
pip install django-redis
pip install pymysql

3.新建app

python manage.py startapp app名称

4.修改settings.py

增加

import pymysql
pymysql.install_as_MySQLdb()

修改

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app名称'
]
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    #'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': '数据库名称',
        'USER': "用户名",
        'PASSWORD': '密码',
        'PORT': 3306
        # 'LOCATION': IP
    }
}
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),  # 指定静态文件目录
]
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

三、在app中写后端

1.model.py

class webUser(models.Model):
    class Meta:
        db_table = "web_user"
    u_id = models.CharField(primary_key=True, max_length=50)
    u_pwd = models.CharField(max_length=30)
    u_name = models.CharField(max_length=20)

数据库可以自己去建表,表名是web_user,有三个属性,就是u_什么的这些。
也可以使用如下代码,在终端输入后,迁移模型。

python manage.py makemigrations
python manage.py migrate

2.views.py

在app中会有views.py文件

def check_login(request):
    if request.method=="POST":
        print("login")
        u_id = request.POST.get("u_id")
        u_pwd = request.POST.get("u_pwd")
        try:
            user = webUser.objects.get(u_id=u_id)
            print(user)
        except Exception as e:
            user = None
            print(e)
        else:
            if u_pwd == user.u_pwd:
                print("success")
                # 登录成功
                request.session["current_user"] = {
                    "u_id": user.u_id,
                    "u_name": user.u_name,
                    # 你可以根据需要添加更多属性
                }
                return HttpResponse("ok")
        request.session["current_user"] = None
        return render(request, "login.html", {'msg': '账号或密码错误'})
    elif request.method=="GET":
        return render(request, "login.html")
    else:
        redirect("/")
def register(request):
    if request.method=="POST":
        u_id = request.POST.get("u_id")
        u_pwd = request.POST.get("u_pwd")
        u_name = request.POST.get("u_name")
        try:
            print("ok")
            user = webUser(u_id=u_id,u_pwd=u_pwd,u_name=u_name)
        except Exception as e:
            print(e)
            return JsonResponse({
                'msg': 'register fail',
                'code': 403
            })
        else:
            user.save()
            return JsonResponse({
                'code': 200,
                'msg': 'register success',
            })
    elif request.method=="GET":
        return render(request,"register.html")
    else :
        render(request,'index.html')
def logout(request):
    request.session.clear()
    return HttpResponse("logout")
def index(request):
    return render(request, "index.html")

3.配置路由

在app中新建urls.py

from django.urls import path

urlpatterns = [
    path("",index,name="index"),
    path('register/',register,name="register"),
    path('login/',check_login,name="login"),
    path('logout/',logout,name="logout")
]

主路由(刚建完项目时的那个目录下)修改如下

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('', include('app名称.urls')),
    path('admin/', admin.site.urls),
]

四、在Template写前端

根据路由,我们有三个页面,首页、登录和注册。

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>首页</h1>
<p>
    <a href="{% url 'register' %}" rel="external nofollow" >register</a>
    <a href="{% url 'login' %}" rel="external nofollow" >login</a>
</p>
</body>
</html>

login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>
    login
</h1>
<div style="color:red;font-size:10pt;">{{ msg }}</div>
<form action="{% url 'login' %}" id="frmlogin" method="post">
    <label>
        <input type="text" name = "u_id" placeholder="请输入您的电子邮箱"/>
    </label><br/>
    <label>
        <input type="password" name="u_pwd" placeholder="password"/>
    </label><br/>
    <label>
        <input type="submit" value="submit">
    </label>
</form>
</body>
</html>

register.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>
    register
</h1>
<form action="{% url 'register' %}" id="register-form" method="post">
    <label>
        <input type="text" name="u_id" placeholder="请输入您的电子邮箱"/>
    </label><br/>
    <label>
        <input type="password" name="u_pwd" placeholder="password"/>
    </label><br/>
    <label>
        <input type="text" name="u_name" placeholder="username"/>
    </label><br/>
    <label>
        <input type="submit" value="submit">
    </label>
</form>

<script>
    document.getElementById('register-form').addEventListener('submit', function (event) {
        event.preventDefault();
        console.log("script")
        alert("script")
        var form = this;
        var formData = new FormData(form);

        fetch('/register/', {
            method: 'POST',
            body: formData
        })
            .then(response => response.json())
            .then(data => {
                window.alert(data.msg); // 显示消息弹窗
                if (data.code === 200) { // 检查状态码是否为 200
                    setTimeout(function () { // 使用 setTimeout 来确保弹窗关闭后再重定向
                        window.location.href = '{% url 'login' %}'; // 重定向到登录页面
                    }, 0); // 0 毫秒延迟,但足以让浏览器处理弹窗的关闭
                }
            })
            .catch(error => {
                console.error('Error:', error);
            });
    });
</script>
</body>
</html>

五、启动

在这里插入图片描述

1. 首页

在这里插入图片描述

2. 注册

在这里插入图片描述

3. 登录

在这里插入图片描述

在这里插入图片描述

六、关于报错

可能会碰到许多报错

总结

简单的登录系统制作完了,但大部分情况可能还是用Django自带的django.contrib.auth进行登录和注册。接下来可以继续扩展用户的删除、修改和查询。

到此这篇关于Django制作简易注册登录系统的实现示例的文章就介绍到这了,更多相关Django制作注册登录系统内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文