当前位置: 首页 > news >正文

Django Project | 云笔记练习项目

文章目录

    • 功能
    • 整体架构流程
    • 搭建平台环境
    • 子功能
      • 先创建用户表 并同步到数据库
      • 1.用户注册
        • 密码存储 -- 哈希算法
        • 唯一索引引发的重复问题 try
        • 登陆状态保持 -- 详细看用户登录状态
      • 2. 用户登录
        • 会话状态时间 + cookie
        • 用户登录状态校验
      • 3. 网站首页
      • 4.退出登录
      • 5.笔记模块 列表页
        • 添加笔记
    • 补充
      • 哈希算法

功能

Django搭建的在线云笔记项目 支持如下功能:

  1. 用户登录、注册
  2. 登录用户的笔记创建、展示
  3. 页面登录状态检测
  4. 登陆状态【免登录】设置
  5. 扩展-- 删除、更改【没写】

源码:GitHub云笔记小项目

资源:Django框架练习之云笔记项目

建议大家多使用git练习从GitHub上下载资源

整体架构流程

在这里插入图片描述

搭建平台环境

  • 基于pycharm社区版本搭建

有的可能命令行使用python3y语句有效果 我的是python 看个人

# 命令行创建
1. 创建项目	django-admin startproject tedu_note
2. 创建应用  python manage.py startapp user # 【注意 python3 manage.py startapp user 可能没有效果】
3. 创建数据库tedu_note  # [Navicat直接登录手动创建]

在这里插入图片描述
4. 配置settings.py
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
5. 启动项目

python manage.py runserver 【注意 python3 manage.py runserver没有效果】

在这里插入图片描述

子功能

先创建用户表 并同步到数据库

在这里插入图片描述

  1. 创建用户表
class User(models.Model):username = models.CharField(verbose_name="用户名",max_length=30,unique=True)password = models.CharField('密码',max_length=32)created_time = models.DateTimeField('创建时间',auto_now_add = True) # 第一次被创建时自动设置为当前日期和时间updated_time = models.DateTimeField('更新时间',auto_now = True) # 在模型的任何 save() 操作时自动设置为当前日期和时间def __str__(self): # 影响输出格式return 'username %s' % (self.username)
  • 同步数据库 使用的是python 不是python3

python manage.py makemigrations
python manage.py migrate

在这里插入图片描述

1.用户注册

在这里插入图片描述

  • views.py
# views.py文件中的视图函数
def reg_view(request):#注册if request.method == 'GET':# GET 返回页面return render(request,'user/register.html')elif request.method == 'POST':username = request.POST['username']pass1 = request.POST['password_1']pass2 = request.POST['password_2']# POST 处理提交数据#  1. 密码一致if pass1 != pass2:return HttpResponse('两次输入密码不一致!!!')#  2.当前用户名是否可用  检查是否注册old_user = User.objects.filter(username=username)if old_user:return HttpResponse('用户名已注册!!!')# 插入数据 【明文处理】User.objects.create(username=username,password = pass1)return HttpResponse('注册成功!')
  • 上述代码问题
    ​ 明文密码如何处理?
    ​ 多用户同时并行插入问题?
    ​ 产品经理要求注册则免登陆一天,这功能怎么做?
密码存储 – 哈希算法

直接使用明文密码的潜在风险 需要加密

def reg_view(request):#注册if request.method == 'GET':# GET 返回页面return render(request,'user/register.html')elif request.method == 'POST':username = request.POST['username']pass1 = request.POST['password_1']pass2 = request.POST['password_2']# POST 处理提交数据#  1. 密码一致if pass1 != pass2:return HttpResponse('两次输入密码不一致!!!')# 哈希算法 - 给定明文  计算出一段定长的  不可逆的值  md5  sha-256# 特点# 1. 定长输出 : 不管明文输入长度多少  哈希值定长  md5 - 32位 16进制  【解释密码设置32】# 2. 不可逆 :无法反向计算出 对应 的 明文# 3. 雪崩效应 输入改变 输出改变# 场景 : 1.密码处理    2.文件的完整性校验# 如何使用 方法调用m = hashlib.md5()m.update(pass1.encode())  # encode()变成字节串pass1_hash = m.hexdigest()  # 生成哈希值#  2.当前用户名是否可用  检查是否注册old_user = User.objects.filter(username=username)if old_user:return HttpResponse('用户名已注册!!!')# 插入数据 【明文处理】User.objects.create(username=username,password=pass1_hash)return HttpResponse('注册成功!')

在这里插入图片描述

唯一索引引发的重复问题 try

请求量大 User.objects.create 会报错 在username该字段 因为是唯一字段 可能由于并发注册问题 发生重复写入问题 对于这类问题 善于用try解决

在这里插入图片描述

try :User.objects.create(username=username,password=pass1_hash)
except Exception as e:# 由于唯一索引 报错 重复插入 【唯一索引注意并发写入问题】print('--create user error %s' % (e))return HttpResponse('用户名已注册')
登陆状态保持 – 详细看用户登录状态
# 免登录一天 session  用户名  主键  存入 session
request.session['username'] = username
request.session['uid'] = user.id
# TODO 修改session存储时间为1天   settings.py
# SESSION_COOKIE_AGE  =  86400  # 1天 = 24小时 * 60分钟 * 60秒 = 86400秒
  • settings.py设置一天时间
    在这里插入图片描述

2. 用户登录

在这里插入图片描述

def login_view(request):if request.method == 'GET':# GET 返回页面return render(request,'user/login.html')elif request.method == 'POST':# 获得数据username = request.POST['username']password = request.POST['password']# 查询  是否有此人# username 是唯一索引try:user = User.objects.get(username=username) # 找不到 肯定没有except Exception as e:print('--login user error %s' % (e))return HttpResponse('用户名或者密码错误!!!')# 比对密码  因为哈希不可逆 所以从新生成哈希  用哈希数值进行比对m = hashlib.md5()m.update(password.encode())if m.hexdigest() != user.password:return HttpResponse('用户名或密码错误')# 记录会话状态# 免登录一天 session  用户名  主键  存入 sessionrequest.POST['username'] = usernamerequest.POST['uid'] = user.idreturn HttpResponse('登录成功!!!')
会话状态时间 + cookie

在这里插入图片描述
1 记住用户名 免登录三天

# 判断有没有✔  通过检查浏览器响应分析 checkbox的状态 remember=on
# #点选了->Cookies存储username,uid时间3天
resp = HttpResponse('--------success---------')
if 'remember' in request.POST:resp.set_cookie('username', username, 3600 * 24 * 3)resp.set_cookie('uid', user.id, 3600 * 24 * 3)return resp

13号写的程序
在这里插入图片描述
2. 不记住 一天 就是session
在这里插入图片描述

用户登录状态校验

在这里插入图片描述
在这里插入图片描述

3. 网站首页

在这里插入图片描述

4.退出登录

在这里插入图片描述

5.笔记模块 列表页

在这里插入图片描述

添加笔记

在这里插入图片描述

补充

哈希算法

import hashlib
m = hashlib.md5()
m.update(b'明文')  # 必须字节b串
m.hexdigest()  # hexdigest 理解为16紧进制摘要# 若要想要计算新的数值
# 从新这样生成
m = hashlib.md5()
m.update(b'明文')  # 必须字节b串
m.hexdigest()  # hexdigest 理解为16紧进制摘要# 若是直接update  相当于两次明文的拼接 

在这里插入图片描述
在这里插入图片描述

相关文章:

Django Project | 云笔记练习项目

文章目录 功能整体架构流程搭建平台环境子功能先创建用户表 并同步到数据库1.用户注册密码存储 -- 哈希算法唯一索引引发的重复问题 try登陆状态保持 -- 详细看用户登录状态 2. 用户登录会话状态时间 cookie用户登录状态校验 3. 网站首页4.退出登录5.笔记模块 列表页添加笔记 …...

Zookeeper的监听机制

Zookeeper的监听机制是Zookeeper框架中一个至关重要的功能,它实现了分布式系统中数据状态变化的实时通知,使得客户端能够及时响应并处理这些变化。下面将详细解析Zookeeper的监听机制及其原理,包括监听器的注册、事件通知的处理、监听器的特点…...

Swift withAnimation 动画完成监听

在ios17中withAnimation有completion方法可以监听动画完成,但是低于ios17没有,需要自定义一个监听器,原理就是通过AnimatableModifier可以监听到值的didSet修改,我们就可以调用回调函数。 代码 // 动画完成监听 struct Animatabl…...

场外期权交易:找到适合你的那一款

各位期权爱好者们!今天咱们来聊聊在进行场外期权交易时,怎么去评估和选择适合自己风险承受能力的期权产品。 第一,你得对自己有个清楚的认识。想想看,你是那种激进型的冒险家,还是保守型的稳健派呢?了解自己…...

Elasticsearch-使用java 批量插入文档

首先创建两个实体类,用于存放所需值 开始编写接口,这里我使用的是RestController风格,然后使用PostMapping注解,入参根据自己的需求自定义,没有固定规范 这里实现接口的方法 然后重写接口中的方法(编写核心…...

【区块链+食品安全】农业产业全过程溯源云平台 | FISCO BCOS应用案例

近年来,食品安全问题频发,尤其疫情期间,海鲜、冷冻畜牧产品的入口安全成为大众关注焦点,追溯、确保相关产品生产、运输、售卖等环节的信息真实、有效,成为保证食品安全的核心环节。浙江天演维真网络科技股份有限公司基…...

每日面试题Day2

C语言中 # 和 ## 的用法 # 是 字符串化操作符,定义时用括号代表参数传递, 可以把传入的参数名替换成带双引号的字符串 定义: #define a(b) #a 使用:a(123) 编译时会展开成 "123" ## 是字符串连接符,定义时用括号代表参数传递, 可以把参数在宏定义的字符…...

基于MyBatis-plus的SpringBoot开发

目录 一、SpringBoot整合mybatis 二、SpringBoot整合mybatis-plus 1、什么是mybatis-plus? 2、mybatis-plus的特性 3、mybatis-plus的使用 (1)编写注解配置实体类与关系表映射关系 (2)mapper层 (3…...

网站数据导出为excel 源码大全java php c# js python 与网络安全兼顾-阿雪技术观

一、阿雪技术观谈网站安全 1.保护用户隐私和数据 用户在访问网站时会提供各种个人信息,如姓名、地址、联系方式、信息等。如果网站存在安全漏洞,这些敏感信息可能会被黑客窃取,导致用户遭受身份盗窃、欺诈等 2.维护企业声誉和信任 一个安全可…...

Python知识点21---怎么把你的Python项目打包成一个完整的结果物给别人提供

很多写Python的人,都会遇到一个很抓瞎的事情,项目这么打包?就比如写Java代码写惯了,突然写个Python,就在想怎么办Python的平替Maven是什么?怎么把环境和写的代码打成一个结果物?这篇就告诉你。 …...

关于#genesiscsheel#的问题,如何解决?

🏆本文收录于《CSDN问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收…...

无人机之如何避免飞行错误篇

在无人机飞行中,飞手可能会遇到各种问题,这些问题不仅会影响飞行效果,还可以带来安全隐患。以下是一些常见的错误及避免方法,帮助飞手提高飞行稳定性和安全性: 一、校准传感器 IMU(惯性测量单位&#xff0…...

免费简单的制作3D卡通建模——Fuse软件和Readyplayer的使用介绍

最终效果 文章目录 最终效果一、使用Fuse软件去Steam下载安装捏人选择身体部位自定义人物细节参数换装贴图修改导出OBJ文件即可 二、使用ReadyplayerReadyplayer官网地址选择从模板开始,或者拍照选择图片进行捏脸将模型导入Unity通过Readyplayer官方插件导入模型通过…...

企业大模型业务架构技术选型分析

AI赋能企业:选择适合你的大模型业务架构 现代企业中,大模型业务日益普及,主要涵盖AI Embedded、AI Copilot和AI Agent三大架构。本文深入剖析其特性与适用场景,为企业选择合适的大模型业务架构提供指导,助力企业高效应…...

pyqt5 中python如何通过Qtwebchannel主动发消息给web前端

🏆本文收录于《CSDN问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收…...

Java Web —— 第五天(请求响应2)

响应数据 ResponseBody 类型:方法注解、类注解 位置: Controller方法上/类上 作用:将方法返回值直接响应,如果返回值类型是 实体对象/集合,将会转换为JSON格式响应 说明: RestController Controller ResponseBody ; package com.example.springbo…...

数据科学 - 模型检验

1. 前言 模型检验是数据科学项目中至关重要的步骤,确保模型的质量,可靠性和实用性。 模型检验的主要目的是评估模型的性能,验证其在实际应用中的效果,以及防止模型出现过拟合,欠拟合或其他潜在问题。 在日常学习工作…...

【GaussDB(DWS)】数仓部署架构与物理结构分析

数仓架构与物理结构分析 一、部署架构二、物理结构三、测试验证 一、部署架构 华为数据仓库服务DWS,集群版本8.1.3.x 集群拓扑结构: 上述拓扑结构为DWS单AZ高可靠部署架构,为减少硬件故障对系统可用性的影响,建议集群部署方案遵…...

git做版本管理的时候,中途添加了新的内容在.gitignore中,怎么让git不再跟踪

当您在 .gitignore 文件中添加了新的路径模式后,Git 将不再跟踪这些路径下的新文件。但是,如果这些路径下的文件已经被 Git 跟踪(即它们已经被提交到仓库),您需要执行一些额外的步骤来让 Git 停止跟踪这些文件。 以下…...

Unity新输入系统 之 PlayerInput(真正的最后封装部分)

本文仅作笔记学习和分享,不用做任何商业用途 本文包括但不限于unity官方手册,unity唐老狮等教程知识,如有不足还请斧正​ 首先你应该了解新输入系统的基本单位和输入配置文件 Unity新输入系统 之 InputAction(输入配置文件最基本的…...

Cursor实现用excel数据填充word模版的方法

cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...

IGP(Interior Gateway Protocol,内部网关协议)

IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

3403. 从盒子中找出字典序最大的字符串 I

3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

力扣-35.搜索插入位置

题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

AI,如何重构理解、匹配与决策?

AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...

【C++进阶篇】智能指针

C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...