React小项目-在线计算器(下)

2023-09-13 15:47:22

本文为 React 项目(在线计算器)的下篇内容,主要为后端部分的开发,上篇可见:React 小项目-在线计算器(上)

1. Django项目初始化

我们先在项目根目录下打开终端,创建一个 Python 虚拟环境:

python -m venv venv

启动虚拟环境:

.\venv\Scripts\Activate.ps1

安装环境:

pip install django
npm i jquery

查看 Django 版本:

django-admin --version

创建 Django 项目:

django-admin startproject calculator_django

同步数据库的修改:

python manage.py migrate

启动 Django 项目:

python manage.py runserver localhost:8000

创建管理员用户(假设用户名和密码都为 admin):

python manage.py createsuperuser

创建新的 App:

python manage.py startapp app

app 目录中的 views.pymodels.py 删除,创建 viewsmodelsurls 文件夹,并在这三个目录下创建好 __init__.py 文件。

更新一下总 URL 文件(calculator_django/calculator_django/urls.py):

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

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

接着进行一些项目的全局设置,首先设置一下项目的时区,打开 calculator_django/calculator_django/settings.py(之后的操作均在该文件中),修改 TIME_ZONE

TIME_ZONE = 'Asia/Shanghai'

为防止出现跨域问题,我们可以添加以下一行代码:

SECURE_CROSS_ORIGIN_OPENER_POLICY = 'None'

然后将自己创建的 App 加载进来,找到 INSTALLED_APPS,将 app/apps.py 添加进来:

INSTALLED_APPS = [
    'app.apps.AppConfig',  # 添加此行
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

找到 STATIC_URL = 'static/',在其附近添加几行:

import os  # 在文件首部导入包

STATIC_ROOT = os.path.join(BASE_DIR, 'static')  # 表示要将静态文件放到static目录下
STATIC_URL = 'static/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = 'media/'

我们在 app 目录中创建 static 文件夹,之后即可通过链接 http://localhost:8000/static/xxx 访问 static 目录中的静态文件。

2. 登录/注册后端功能实现

我们在 calculator_django/app/views 目录下创建 login.py

from django.contrib.auth import authenticate, login
from django.http import JsonResponse

def mylogin(request):
    data = request.GET
    username = data.get('username')
    password = data.get('password')
    user = authenticate(username=username, password=password)
    if not user:
        return JsonResponse({
   
            'result': 'Username or password wrong!',

        })
    login(request, user)
    return JsonResponse({
   
        'result': 'success',
    })

然后创建 logout.py

from django.contrib.auth import logout
from django.http import JsonResponse

def mylogout(request):
    user = request.user
    if not user.is_authenticated:
        return JsonResponse({
   
            'result': 'success',
        })
    logout(request)
    return JsonResponse({
   
        'result': 'success',
    })

然后创建 register.py

from django.contrib.auth import login
from django.contrib.auth.models import User
from django.http import JsonResponse

def register(request):
    data = request.GET
    username = data.get('username', '').strip()  # 如果没有的话返回空,且过滤掉空格
    password = data.get('password', '').strip()
    confirm_password = data.get('confirm_password', '').strip()
    if not username or not password:  # 用户名或密码为空
        return JsonResponse({
   
            'result': 'Username or password can\'t be empty!',
        })
    elif password != confirm_password:  # 两次密码不一致
        return JsonResponse({
   
            'result': 'Password inconsistency!'
        })
    elif User.objects.filter(username=username).exists():  # 用户名已存在
        return JsonResponse({
   
            'result': 'Username has existed!'
        })
    user = User(username=username)
    user.set_password(password)
    user.save()
    login(request, user)
    return JsonResponse({
   
        'result': 'success',
    })

现在在 calculator_django/app/urls 目录中编写路由 index.py

from django.urls import path
from app.views.login import mylogin
from app.views.logout import mylogout
from app.views.register import register

urlpatterns = [
    path('login/', mylogin, name='login'),
    path('logout/', mylogout, name='logout'),
    path('register/', register, name='register'),
]

3. 登录/注册前端界面设计

现在我们实现登录界面(login.jsx 文件):

import React, {
    Component } from 'react';
import Card from './card';
import $ from 'jquery';

class Login extends Component {
   
    state = {
   
        username: '',
        password: '',
        error_message: '',  // 错误信息提示
    };

    handleLogin = (e) => {
   
        e.preventDefault();  // 阻止默认的提交行为,之后用ajax提交
        this.setState({
   error_message: 
更多推荐

PostgreSQL 排查慢 SQL

文章目录前言1.日志参数设置2.pg_stat_statements插件2.1确认是否安装插件2.2编译插件2.3载入插件2.4插件使用3.慢SQL排查手段3.1查询当前会话3.2查看TOPSQL前言所谓慢SQL是指在数据库中执行时间超过指定阈值的语句。慢查询太多,对于业务而言,是有很大风险的,可能随时都会因为某种原因

使用Git把项目上传到Gitee的详细步骤

1.到Git官网下载并安装2.到Gitee官网进行注册,然后在Gitee中新建一个远程仓库3.设置远程仓库的参数4.返回Gitee查看仓库是否生成成功5.新建一个文件夹作为你的本地仓库6.将新建好的文件夹初始化成本地仓库第一步:右键点击刚创建的本地仓库,然后点击GitBashHere第二步:在命令行里输入gitinit

八、【漏洞复现】jupyter-notebook 命令执行(CVE-2019-9644)

8.0、基础知识1、测试功能点(这种情况基本上很难遇到)8.1、漏洞原理​JupyterNotebook是一套用于创建、共享代码和说明性文本文档的开源Web应用程序。JupyterNotebook可直接使用命令行执行任意命令。​8.2、影响范围未授权开启终端权限的系统8.3、指纹识别1.有主页与明显logo主页:log

常见web漏洞原理整理

文章目录一、SQL注入1.1SQL注入漏洞原理1.2SQL注入的两个关键点1.3与Mysql注入相关的知识点1.4SQL注入的主要分类1.5SQL注入的流程1.5.1普通SQL注入1.5.2盲注1.6SQL注入总结二、文件上传2.1文件上传漏洞原理2.2客户端检测及绕过(JS检测与绕过)2.3服务端检测2.3.1后缀名

力扣常见算法题

LeetCode上的问题可以有很多不同的解题思路,具体的解法取决于问题的要求和限制条件。以下是一些常见的解题思路和Python代码示例:文章目录思路1.暴力法(BruteForce):2.哈希表(HashTable):3.双指针(TwoPointers):4.动态规划(DynamicProgramming):例题1.两

【第43篇】CLIP:从自然语言监督中学习可迁移的视觉模型

摘要最先进的计算机视觉系统被训练来预测一组固定的预定对象类别。这种受限制的监督形式限制了它们的通用性和可用性,因为需要额外的标记数据来指定任何其他视觉概念。直接从有关图像的原始文本中学习是一种很有前途的替代方案,它利用了更广泛的监督来源。我们证明了预测哪个标题与哪个图像搭配的简单预训练任务是一种有效且可扩展的方式,可以

华纳云:Ubuntu中怎么配置lamp环境

LAMP(Linux、Apache、MySQL、PHP)是一种常用于搭建Web服务器的开发环境。在Ubuntu中配置LAMP环境相对简单,以下是配置的基本步骤:安装ApacheWeb服务器:打开终端,运行以下命令安装Apache:sudoaptupdatesudoaptinstallapache2安装完成后,启动Apa

使用 PyTorch 的计算机视觉简介 (3/6)

一、说明在本单元中,我们将了解卷积神经网络(CNN),它是专门为计算机视觉设计的。卷积层允许我们从图像中提取某些图像模式,以便最终分类器基于这些特征。二、卷积神经网络计算机视觉不同于通用分类,因为当我们试图在图片中找到某个物体时,我们正在扫描图像以寻找一些特定的图案及其组合。比如在寻找猫的时候,我们首先可能会寻找水平线

​重生奇迹MU魔剑士玩转攻略​

大家都知道重生奇迹MU中有很多职业,比如魔法师、弓箭手、剑士等等,并且后续版本又推出了其他职业。根据职业加点不同又有很多方向,像魔剑士便是剑士的一个发展分支。如何玩好奇迹魔剑士?那么玩魔剑士应该怎么玩呢,我们玩家应该怎么去好游戏之中的魔剑士呢,在加点方面需要注意什么呢,这些问题对于每一个玩家都应该思考一下。如果玩家想要

绘图(一)弹球小游戏

AWT编程·语雀仓库:Java图形化界面:Java图形化界面学习demo与资料(gitee.com)很多程序如各种小游戏都需要在窗口中绘制各种图形,除此之外,即使在开发JavaEE项目时,有时候也必须"动态"地向客户端生成各种图形、图表,比如图形验证码、统计图等,这都需要利用AWT的绘图功能。组件绘图原理之前我们已经学

高通8295中国首发!智舱再度上演「军备竞赛」,这次有何不同

对于智能座舱来说,上一轮市场红利已经接近尾声。高工智能汽车研究院监测数据显示,2023年1-6月中国市场(不含进出口)乘用车前装标配中控娱乐系统交付856.13万辆,前装标配渗透率已经超过90%,达到92.13%。其中,支持车联网功能主机占比也已经超过80%,达到83.03%。这意味着,车企需要尽快构建下一代座舱的差异

热文推荐