41.Django之web注册登录修改注销功能实现

2023-05-16

目录

1.django配置步骤

2.django链接数据库(MySQL)

3.利用orm创建数据库表

4.django的myweb01项目中的url.py添加路由

5.django的app01应用中的views.py添加逻辑函数

6.templates文件夹的四个html页面

6.1 userlist.html

6.2 reg.html

6.3 login.html

6.4 edit_user.html

7.效果图


前提:此为django+mysql+前端,为了方便测试在登录或注册返回的都是现有用户列表页面

1.django配置步骤

1.cmd创建项目django-admin startproject myweb01
2.vscode打开项目,通过manage.py启动django项目,或cmd下python manage.py runserver
3.创建app01:python manage.py startapp app01
4.把app01加进项目myweb01中settings.py文件中:
    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'app01'                         # 直接写qpp01
    ]
5.项目myweb01同级下手动创建templates文件夹用来存放HTML文件,并且配置权限
  即将templates文件夹权限添加进项目myweb01中settings.py中
    TEMPLATES = [
                {
                    'BACKEND': 'django.template.backends.django.DjangoTemplates',
                    'DIRS': [],
                    'APP_DIRS': True,
                    'OPTIONS': {
                        'context_processors': [
                            'django.template.context_processors.debug',
                            'django.template.context_processors.request',
                            'django.contrib.auth.context_processors.auth',
                            'django.contrib.messages.context_processors.messages',
                            ],
                        },
                    },
            ]
     其中:'DIRS': [],中加templatew拼接路径:os.path.join(BASE_DIR, 'templates')
6.项目myweb01同级下手动创建static文件夹用来存放静态文件,也就是写好的ccs,js等
  当然static文件夹也要配置:在项目myweb01中settings.py中的STATIC_URL = '/static/'下面添加:
        STATICFILES_DIRS = [
            os.path.join(BASE_DIR, 'static'),
        ]
7.因为前端用得到bootstrap,jquery,将bootstrap的css和js,jquery.js放到static中
8.在使用django提交post请求的时候,需要在项目myweb01中settings.py配置文件中注释掉一行代码(重要)
    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',
        ]

2.django链接数据库(MySQL)

1.MySQL用navicat软件快速创建名为myweb01数据库
2.到项目myweb01中的setting.py文件中配置:
    DATABASES = {
            'default': {
                'ENGINE': 'django.db.backends.mysql',    # 声明连接mysql
                'NAME': 'myweb01',                       # 数据库名
                'USER':'root',                           # 用户
                'PASSWORD':'117',                        # 密码
                'HOST':'127.0.0.1',                      # 本地连接
                'PORT':3306,                             # 端口                 
                'CHARSET':'utf8'
            }
    }
3.在项目名下的init文件中书写以下代码声明:
import pymysql
pymysql.install_as_MySQLdb()

3.利用orm创建数据库表

1.在app01中的models.py文件中创建相关类(表):
from django.db import models
# Create your models here.
class User(models.Model):
    id = models.AutoField(primary_key=True, verbose_name='主键')
    username = models.CharField(max_length=32, verbose_name='用户名')
    password = models.CharField(verbose_name='密码', max_length=64)

2.并且执行两条数据库迁移命令
(1)python manage.py makemigrations    # 将操作记录记录到小本本上(migrations文件夹)
(2)python manage.py migrate           # 将操作真正的同步到数据库中

4.django的myweb01项目中的url.py添加路由

from django.conf.urls import url
from django.contrib import admin
from app01 import views

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^register/', views.reg),          # 注册功能
    url(r'^login/', views.login),           # 登陆功能
    url(r'^userlist/', views.userlist),     # 展示用户列表
    url(r'^edit_user/', views.edit_user),   # 编辑用户
    url(r'^delete_user/', views.delete_user)    # 删除用户
]

5.django的app01应用中的views.py添加逻辑函数

    通过orm来与MySQL做数据交互

from django.shortcuts import render, HttpResponse, redirect
from app01 import models

# Create your views here.


# 用户列表
def userlist(request):
    user_queryset = models.User.objects.all()
    return render(request, 'userlist.html', locals())


# 注册页面
def register(request):
    if request.method == "POST":
        username = request.POST.get('username')
        password = request.POST.get('password')
        user_obj = models.User.objects.filter(username=username).first()
        if user_obj:
            return HttpResponse("用户已存在")
        else:
            user_obj = models.User(username=username, password=password)
            user_obj.save()  # 保存数据
            return redirect('/userlist/')
    return render(request, 'reg.html')


# 登录页面
def login(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        user_obj = models.User.objects.filter(username=username).first()
        if user_obj:
            if password == user_obj.password:
                return redirect('/userlist/')
            else:
                return HttpResponse("密码错误")
        else:
            return HttpResponse("用户不存在")
    return render(request, 'login.html')


# 修改密码页面
def edit_user(request):
    edit_id = request.GET.get('user_id')  # 获取url问号后面的参数
    edit_obj = models.User.objects.filter(
        id=edit_id).first()  # 查询当前用户想要编辑的数据对象
    if request.method == "POST":
        username = request.POST.get('username')
        password = request.POST.get('password')
        models.User.objects.filter(id=edit_id).update(username=username,
                                                      password=password)
        return redirect('/userlist/')
    return render(request, 'edit_user.html', locals())


# 删除账号页面
def delete_user(request):
    delete_id = request.GET.get('user_id')  # 获取用户想要删除的数据id值
    models.User.objects.filter(id=delete_id).delete()  # 直接去数据库中找到对应的数据删除即可
    return redirect('/userlist/')

6.templates文件夹的四个html页面

6.1 userlist.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="../static/css/bootstrap.min.css">
    <script src="../static/js/bootstrap.min.js"></script>
    <script src="../static/js/jQuery 3.6.0.js"></script>
</head>
<body>
    <h1 class="text-center">数据展示</h1>
    <div class="container">
        <div class="row">
            <div class="col-md-8 col-md-offset-2">
                <table class="table table-striped table-hover">
                    <thead>
                        <tr>
                            <th>ID</th>
                            <th>username</th>
                            <th>password</th>
                            <th>action</th>
                        </tr>
                    </thead>
                    <tbody>
                        <!-- for循环数据库取值 -->
                        {% for user_obj in user_queryset %}
                        <tr>
                            <td>{{ user_obj.id }}</td>
                            <td>{{ user_obj.username }}</td>
                            <td>{{ user_obj.password }}</td>
                            <td>
                                <a href="/edit_user/?user_id={{ user_obj.id }}" class="btn btn-primary btn-xs">编辑</a>
                                <a href="/delete_user/?user_id={{ user_obj.id }}" class="btn btn-danger btn-xs">删除</a>
                            </td>
                        </tr>
                        {% endfor %}
                    </tbody>
                </table>
            </div>
        </div>
    </div>
</body>
</html>

6.2 reg.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="../static/css/bootstrap.min.css">
    <script src="../static/js/bootstrap.min.js"></script>
    <script src="../static/js/jQuery 3.6.0.js"></script>
</head>
<body>
    <h1 class="text-center">注册</h1>
    <div class="container">
        <div class="row">
            <div class="col-md-8 col-md-offset-2">
                <form action="" method="post">
                    <p>username:<input type="text" name="username" class="form-control"></p>
                    <p>password:<input type="password" name="password" class="form-control"></p>
                    <input type="submit" class="btn btn-danger btn-block">
                </form>
            </div>
        </div>
    </div>
</body>
</html>

6.3 login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="../static/css/bootstrap.min.css">
    <script src="../static/js/bootstrap.min.js"></script>
    <script src="../static/js/jQuery 3.6.0.js"></script>
</head>
<body>
<h1 class="text-center">登陆</h1>
<div class="container">
    <div class="row">
        <div class="col-md-8 col-md-offset-2">
            <form action="" method="post">
                <p>username:<input type="text" name="username" class="form-control"></p>
                <p>password:<input type="password" name="password" class="form-control"></p>
                <input type="submit" class="btn btn-success btn-block">
            </form>
        </div>
    </div>
</div>
</body>
</html>

6.4 edit_user.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="../static/css/bootstrap.min.css">
    <script src="../static/js/bootstrap.min.js"></script>
    <script src="../static/js/jQuery 3.6.0.js"></script>
</head>
<body>
<h1 class="text-center">编辑</h1>
<div class="container">
    <div class="row">
        <div class="col-md-8 col-md-offset-2">
            <form action="" method="post">
                <p>username:<input type="text" name="username" class="form-control" value="{{ edit_obj.username }}"></p>
                <p>password:<input type="text" name="password" class="form-control" value="{{ edit_obj.password }}"></p>
                <input type="submit" class="btn btn-info btn-block" value="编辑">
            </form>
        </div>
    </div>
</div>
</body>
</html>

7.效果图

最后:此为wo在b站egon老师视频那跟学总结

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

41.Django之web注册登录修改注销功能实现 的相关文章

随机推荐

  • scrapy安装笔记并使用

    1 安装方法 xff1a Linux Mac xff1a pip install scrapy windows 简单使用直接pip install scrapy即可 1 pip install wheel 用于安装twisted 2 下载t
  • rosbag库的安装

    Output 1 python3 m pip install bagpy 2 python3 m pip install roslz4 extra index url https rospypi github io simple 1 安装a
  • 下载安装dingding

    百度搜索钉钉官网 xff1a https page dingtalk com wow z dingtalk simple ddhomedownlaod 下载安装包 xff1a com alibabainc dingtalk 1 4 0 20
  • su认证失败

    sudo passwd
  • 2021.12.30遇到的错误:No module named ‘paddle‘

    实际上已经安装了paddlepaddle xff0c 但不知为何又报这个错误 根据提示可知原因为未安装paddle 于是又去安装百度飞桨官网安装paddle 安装命令为 python span class token operator sp
  • 计组第六课

    汇编语言的组成 1 汇编指令 xff1a 机器码的助记符 xff0c 有对应机器码 2 伪指令 xff1a 无对应机器码 xff0c 由编译器执行 xff0c 没有对应机器码 3 其他符号 xff1a 如 43 等 xff0c 由编译器识别
  • GitLab秘钥添加

    前提 xff1a 下载Git Bash软件 xff0c 并拥有GitLab账号 1 选择用户主目录 xff08 C 用户 用户名 xff09 下 xff0c 新建一个文件夹 直接修改其文件名为 ssh会提示 必须输入文件名 xff0c 修改
  • C++/C sort函数用法(详细),cmp的构造--一学就会,一用就对

    sort函数 sort是c 43 43 STL标准库中提到的基于快速排序的排序函数 xff0c 在做题的时候使用sort函数很方便 xff0c 使用sort要使用 include 快速排序具有不稳定性 不稳定性是指 xff0c 对于指定区域
  • 远程桌面蓝屏解决办法

    远程桌面蓝屏解决方法 原理 xff1a 重新启动远程桌面进程 操作 xff1a Ctrl Alt End 进入任务管理器 选择expolrer exe结束进程 切换到C盘的Windows目录 运行expolrer exe
  • DPU环境配置

    DPU 型号 xff1a MBF2M516A CEEOT xff08 全高半长 xff08 FHHL xff09 DPU xff09 DPU 类型 xff1a NVIDIA BlueField 2 Ethernet DPU 操作系统 xff
  • s3cmd安装及配置

    一 安装s3cmd 安装命令如下所示 xff1a yum y install python pip pip install s3cmd 二 配置s3cmd 配置s3cmd有两种方式 xff1a 1 使用s3cmd configure方式配置
  • C++中cin输入过程中如何处理ctrl+c输入

    引子 今天在写一个while true 循环程序 xff0c 程序中有用到SetConsoleCtrlHandler函数处理CTRL 43 C输入 xff0c 用到cin输入时不小心按下ctrl 43 c进入了无限循环 xff0c cin不
  • 如果正确修改数据库编码为utf8仍然无法插入中文可以试试用Navicat插入数据

    我的MySQL编码已经修改为utf8 但是仍然无法插入中文数据 如下 这是我的MySQL编码格式 此时插入中文数据就会报错 我的解决办法是使用Navicat插入数据 使用eclipse连接并输出后可以正常执行 lt 64 page lang
  • 如何用LaTeX写一个PPT

    如何用LaTeX写一个PPT 说到写PPT大家一般会想到的是微软的Microsoft PowerPoint xff0c 因为他更易于制作并且拥有丰富的动画 xff0c 但是当你需要制作一个学术相关的ppt时 xff0c 你需要更好的排版以及
  • Ubuntu 22.04图形界面的卸载

    如果你想在 Ubuntu 上卸载图形界面 xff0c 可以按照以下步骤操作 xff1a 进入终端界面 xff1a 按下 Ctrl 43 Alt 43 F3 xff08 或者其他 F1 F6 xff09 可以切换到终端界面 xff0c 然后使
  • 百鸡百钱问题

    我国古代数学家张丘建在 算经 一书中曾提出过著名的 百钱买百鸡 问题 该问题叙述如下 xff1a 鸡翁一 xff0c 值钱五 xff1b 鸡母一 xff0c 值钱三 xff1b 鸡雏三 xff0c 值钱一 xff1b 百钱买百鸡 xff0c
  • 2.【已修复】windows10更新:你的设备中缺少重要的安全和质量修复。

    问题 xff1a 由于自己给笔记本重装Windows10 专业版系统 xff0c 用一段时间后发现系统更新失败 xff0c 更新错误 xff1a 你的设备中缺少重要的安全和质量修复 危 xff1a 电脑有问题先备份资料 解决问题 xff1a
  • Python实现用户注册登录功能

    一 环境 python3 43 vscode 二 文件 xff1a 程序文件 用户 管理员 注册 登陆 py 启动标记文件 flag txt gt 文件内容 xff1a 0 三 程序步骤分块 xff1a 主程序入口 初次启动后 xff0c
  • 5.MySQL建立表的关系(外键)

    目录 1 前言 2 表与表关系 1 一对多关系 2 多对多关系 xff1a 3 一对一关系 3 对表总结 xff1a 4 补充 xff1a 1 修改表 2 复制表 1 前言 1 方法 xff1a foreign key xff1a 外键 外
  • 41.Django之web注册登录修改注销功能实现

    目录 1 django配置步骤 2 django链接数据库 MySQL 3 利用orm创建数据库表 4 django的myweb01项目中的url py添加路由 5 django的app01应用中的views py添加逻辑函数 6 temp