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(输入配置文件最基本的…...

【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...

IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

在WSL2的Ubuntu镜像中安装Docker
Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...

初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

使用LangGraph和LangSmith构建多智能体人工智能系统
现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...

MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...
jmeter聚合报告中参数详解
sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample(样本数) 表示测试中发送的请求数量,即测试执行了多少次请求。 单位,以个或者次数表示。 示例:…...