当前位置: 代码网 > it编程>前端脚本>Python > Django制作简易注册登录系统的实现示例

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

2024年11月27日 Python 我要评论
前言django手搭简易的注册登录,不使用django.contrib.auth一、django是什么?django 最初被设计用于具有快速开发需求的新闻类站点,目的是要实现简单快捷的网站开发。采用m

前言

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

一、django是什么?

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

二、建立django项目

1.新建项目

在这里插入图片描述

选择django新建项目

基本环境

  • python版本为3.10
  • mysql版本为8.0
  • django版本为5.0.3
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. 登录

在这里插入图片描述

在这里插入图片描述

六、关于报错

可能会碰到许多报错

  • 数据库未连接,或者数据库里的表不对:可以删除app目录下的migrations再重新迁移试试
  • 各种包的缺失
  • 网页报错:根据报错信息去修改
  • 点击了submit没反映:通过浏览器console和pycharm终端打印信息看看哪里出问题了

总结

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

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

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com