Django Project | 云笔记练习项目
文章目录
- 功能
- 整体架构流程
- 搭建平台环境
- 子功能
- 先创建用户表 并同步到数据库
- 1.用户注册
- 密码存储 -- 哈希算法
- 唯一索引引发的重复问题 try
- 登陆状态保持 -- 详细看用户登录状态
- 2. 用户登录
- 会话状态时间 + cookie
- 用户登录状态校验
- 3. 网站首页
- 4.退出登录
- 5.笔记模块 列表页
- 添加笔记
- 补充
- 哈希算法
功能
Django搭建的在线云笔记项目 支持如下功能:
- 用户登录、注册
- 登录用户的笔记创建、展示
- 页面登录状态检测
- 登陆状态【免登录】设置
- 扩展-- 删除、更改【没写】
源码: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没有效果】

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

- 创建用户表
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(惯性测量单位࿰…...
免费简单的制作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(输入配置文件最基本的…...
用C语言解决‘换硬币’问题?我来教你如何调试和验证你的循环逻辑
用C语言解决‘换硬币’问题?我来教你如何调试和验证你的循环逻辑 当你第一次面对"换硬币"这类组合问题时,那种既兴奋又困惑的感觉我至今记忆犹新。作为C语言初学者,理解多重循环的运作机制就像在迷宫中寻找出口——每次你以为找到了…...
PDF 可视化签名盖章页技术解析
本文是我在设备检测系统项目开发中,无设备检测的技术实现备忘录,记载实现过程。 本文以 PC 端页面 sign-pdf.vue 为主线,说明「无设备报检」在报告审批环节如何通过前后端协作,完成报告/记录 PDF 上的签名、印章、报告编号拖放定位,并在审批通过后由后端合并生成带签章的正…...
航空航天为什么离不开高强镁合金?国产替代到哪一步了
飞机每减重一千克,全年大约节省四千两百美元的燃油费用——这是航空工程师熟悉的经验值。在商业航空领域,这个数字还只是财务账;在战斗机、导弹和卫星的世界里,减重的收益被换算成更远的航程、更大的载荷、更高的机动性࿰…...
终极Chrome画中画扩展:如何在浏览器中实现高效视频多任务处理
终极Chrome画中画扩展:如何在浏览器中实现高效视频多任务处理 【免费下载链接】picture-in-picture-chrome-extension 项目地址: https://gitcode.com/gh_mirrors/pi/picture-in-picture-chrome-extension 想要在浏览网页、处理文档的同时继续观看视频内容吗…...
告别Windows卡顿!在VMware里给Kubuntu 22.04 LTS分区和安装的保姆级避坑指南
告别Windows卡顿!在VMware里给Kubuntu 22.04 LTS分区和安装的保姆级避坑指南你是否已经厌倦了Windows系统越来越慢的启动速度、频繁的后台更新和资源占用?当你的电脑开始频繁卡顿,或许该考虑给系统来一次"减负"了。Kubuntu 22.04 L…...
AVR+ESP8266双核架构打造独立WiFi天气显示器:从硬件设计到软件实现
1. 项目概述:一个独立WiFi天气显示器的诞生几年前,我琢磨着在书桌上放一个能实时显示天气信息的小玩意儿,市面上成品要么功能单一,要么价格不菲,要么数据源依赖复杂的服务器。于是,我决定自己动手ÿ…...
DeepSeek注释质量跃迁路径(附12个真实项目对比数据+可复用Prompt模板)
更多请点击: https://codechina.net 第一章:DeepSeek注释质量跃迁路径(附12个真实项目对比数据可复用Prompt模板) 高质量代码注释不再是“锦上添花”,而是模型理解意图、团队高效协同与长期可维护性的核心基础设施。…...
Avidemux视频编辑工具终极指南:5个简单步骤快速上手专业剪辑
Avidemux视频编辑工具终极指南:5个简单步骤快速上手专业剪辑 【免费下载链接】avidemux2 Avidemux2, simple video editor 项目地址: https://gitcode.com/gh_mirrors/avi/avidemux2 你是否曾经因为复杂的视频编辑软件而头疼?想要一个免费、开源且…...
工业级SCADA革命:FUXA零代码可视化平台如何重塑工业监控决策
工业级SCADA革命:FUXA零代码可视化平台如何重塑工业监控决策 【免费下载链接】FUXA Web-based Process Visualization (SCADA/HMI/Dashboard) software 项目地址: https://gitcode.com/gh_mirrors/fu/FUXA 在工业4.0和数字化转型浪潮中,传统SCADA…...
HANNA模型:硬约束神经网络实现热力学一致相平衡预测
1. 项目概述:当神经网络遇上热力学硬约束在化工过程设计、分离工艺开发乃至环境科学领域,准确预测混合物的相平衡行为——比如一个混合物在什么条件下会分成两相,或者它的沸点是多少——是至关重要的。这一切的核心,都绕不开一个关…...
