2021-10-17 FLASK下的公共网盘以及私有网盘的写法
FLASK的上传、下载比较简单我,我之前留了博客记录并写了个类似网盘的东西,昨天突然想把网盘搞个验证,于是留下了这篇记录。
因为,我这个已经部署在阿里云服务器上了,所以张贴代码的时候不会进行优化和重构,反正代码这东西既然能用,有时候真的不想仔细看,所以本次主要记录思路和思考点以及注意项,代码码就是意思意思凑合凑合。
首先,网盘建立公有网盘是比较简单的一个HTML,文件名UPLOAD.HTML ,3个路由基本拿下
<html>
<head><title>海的思想个人简易网盘</title>
</head>
<body>
<p><h1>这里是公共网盘</h1></p>{%if phone_s %}
<p><h1>用户:{{phone_s}}你好</h1></p>
<p><h1><a href="wangpan2/{{phone_s}}">进入私人网盘请点击这里</a></h1></p>
{%else%}
<h1><a href="/login">如需私人网盘,请先登录</a></h1>
{%endif%}<form action="/uploader" method="POST" enctype="multipart/form-data"><input type="file" name="file" accept=".jpg,.png,.xls,.doc,.xlsx" /><input type="submit" /></form>{%for i in a %}<p><a href="/down/{{i}}">{{i}}</a></p>{%endfor%}
</body>
</html>
这个HTML页面承载着方面
- 通过判断SESSION的手机号内容语句,来决定是否展示私人网盘的地址
- 通过get方法的表单提供上传选择按钮
- 通过GET方法展示公共目录下的文件(注意:他的路由里边我写了判断是文件夹还是文件的相关逻辑)
- 通过POST方法提交文件,这里注意下ACTION 的呼叫路由就行
然后是配套的路由
from flask import Blueprint,redirect,request,render_template,send_file,session,g
import os
wangpan_bp=Blueprint('wanpan',__name__)
@wangpan_bp.before_request #钩子函数钩住验证部分,用个g把是否验证内容传过去。
def session_phone():phone = session.get('phone')if phone :g.phone =phone else:g.phone = ''@wangpan_bp.route('/wangpan') #这是主路由,页面的基础展示页面都在这里
def wangpan():a=[]for i in os.listdir('./upload/'):if os.path.isfile('./upload/'+i):#这里注意:::必须是相对路径才能判断a.append(i)print(a)#这个a是目录下已经去除了文件夹的文件名集合。phone_s=session.get('phone')# 获取登录信息,这里影响页面是否展示个人网盘连接return render_template('upload.html',a=a,phone_s=phone_s)@wangpan_bp.route('/uploader', methods = ['GET', 'POST']) #上传
def uploader():if request.method == 'POST':f = request.files['file'] #调用方法形成对象 ,f对象可以.filename获取文件名也可以f.save*(保存路径) 执行保存动作f.save(r'./upload/%s'%f.filename) #保存路径格式化进去文件名,保存。return redirect ('/wangpan')
@wangpan_bp.route('/down/<name>')#下载
def down(name):return send_file(r'./upload/%s'%name,as_attachment=True)
下面是私人网盘部分 ,先是HTML文件名UPLOAD2.HTML部分。
<html>
<head><title>海的思想个人简易网盘</title>
</head>
<body>
<p><h1>这里是私人网盘</h1></p>
{%if phone_s %}
<p><h1>用户:{{phone_s}}你好</h1></p>
{%endif%}<form action="/uploader2" method="POST" enctype="multipart/form-data"><input type="file" name="file" accept=".jpg,.png,.xls,.doc,.xlsx" /><input type="submit" /></form>{%for i in a %}<p><a href="/down2/{{i}}">{{i}}</a></p>{%endfor%}
</body>
</html>
这个页面很类似,不同在于,按理说能进入私人网盘的人应该是通过了用户验证的,所以用户必然是有账号的,那么,我们获取用户账号,并在该账号的子文件夹内部执行展示文件、上传、下载内容。那么就是把用户特征传过来并把指向写好
下面是代码部分,接着上面的路由代码写的
@wangpan_bp.route('/wangpan2/<phone>')
def wangpan2(phone):if g.phone==phone:#校验登录a=os.listdir('./upload/'+phone)return render_template('upload2.html',a=a,phone_s=phone)else:return '请去登录'@wangpan_bp.route('/uploader2', methods = ['GET', 'POST']) #上传路由
def uploader2():if request.method == 'POST':phone = g.phonef = request.files['file'] #调用方法形成对象 ,f对象可以.filename获取文件名也可以f.save*(保存路径) 执行保存动作f.save(r'./upload/%s/%s'%(phone,f.filename)) #保存路径格式化进去文件名,保存。这里注意:phone是钩子给的认证信息,存也要存在私人文件夹里return redirect ('/wangpan2/%s'%phone)#存好了重定向也要定到私人目录下
@wangpan_bp.route('/down2/<name>')
def down2(name):print('g is ',g.phone)return send_file(r'./upload/%s/%s'%(g.phone,name),as_attachment=True)#这里也是把私人内容格式化进去
以上内容之外还要补充一个注册、登录内容,注册内容务必在注册的时候给用户成功用户单独建立一个标识文件夹,因为手机号唯一所以,不用怎么做冲突校验。
def login_user():u1 = User()if request.method=='POST':ph=request.form.get('phone')pd=request.form.get('password')rpd=request.form.get('repassword')if pd==rpd:if User.query.filter(User.phone == ph).first() :passelse:u1.phone = phu1.password=pdu1.username='test'db.session.add(u1)db.session.commit()#刷数据库,失败了就报错了os.mkdir('./upload/%s'%ph)#数据库更新成功就给他建个文件夹return '注册新用户完毕,返回输入手机号登录'return render_template('jiaban2.html',u1=u1.query.all())@user_bp.route('/login_ok',methods=['POST','GET'])
def login_ok():u1 = User()if request.method=='POST':ph=request.form.get('phone')pd=request.form.get('password')user_0=User.query.filter(User.phone == ph).first()if user_0 :if user_0.password==pd :session['phone']=user_0.phonereturn redirect('/wangpan')else:return '用户名或密码错误'else:return '用户名或密码错误'
登录页面 ,随便一贴得了
<!DOCTYPE html>
<html>
<head lang="en"><meta charset="UTF-8"><title></title>
</head>
<body>
<form action="login" method="POST" style="text-align: center" >
<h1>查询员工编码</h1> <input type="text" placeholder="员工编码" name="staff_code"><br><input type="submit" value="查询"></form>
<br>
<br><form action="login_user" method="POST" style="text-align: center" ><h1>注册新用户</h1> <p><input type="text" placeholder="手机号" name="phone"></p><p><input type="text" placeholder="密码" name="password"></p><p><input type="text" placeholder="重输密码" name="repassword"></p><br><input type="submit" value="注册"></form>
{%if phone_s %}
<h1>用户:{{phone_s}}你好,登录成功</h1>
{%else%}<form action="login_ok" method="POST" style="text-align: center" ><h1>已注册用户登录</h1> <p><input type="text" placeholder="手机号" name="phone"></p><p><input type="text" placeholder="密码" name="password"></p><br><input type="submit" value="登录">
{%endif%}</form>
</body>
</html>
效果如下:
丑爆了。。。但是~它能用,速度很快而且很好用,不正规,但是自己用,朋友用,也还行,凑合用也马马虎虎。好歹也是有验证的私人网盘,小公司用用也不是不可以,不像微信群里传个文件后期找还要翻几个月聊天记录。
2021-10-17 FLASK下的公共网盘以及私有网盘的写法相关推荐
- linux下,使用Appnode+kodexplorer打造私有网盘
介绍: 可道云Kodexplorer:是一个公开源码的基于Web的在线文档管理器.代码编辑器,能提供了类 Windows/macOS 经典用户界面,一整套在线文件管理.文件预览.编辑.上传下载.在线解 ...
- 基于Linux下搭建NextCloud构建自己的私有网盘
NextCloud是什么 Nextcloud是一款开源免费的私有云存储网盘项目,可以让你快速便捷地搭建一套属于自己或团队的云同步网盘,从而实现跨平台跨设备文件同步.共享.版本控制.团队协作等功能.它的 ...
- 局域网网盘 构建局域网网盘(校园云盘,育网云盘,私有云盘)
在局域网里,你可以不需要带U盘了,你只要登录自己的服务器,制作成自己的网盘.很简单很实用,分享一下 .
- 科恩第一章Friday, October 29, 2021 10:13 AM
文章目录 Chapeter 1 Part A Electromagnetic Waves and Photons **Wave-particle Duality** Chapeter 1 Friday ...
- 内网kift私有网盘如何实现在外网公网访问?快解析映射方案
KIFT是一款面向个人.团队.小型组织的网盘服务器系统,安装运行比较简单,开箱即用,下载解压,双击jar文件即可启动.因为是开源的,不少人选择使用KIFT做开源私有网盘,有能力的大佬还可以对它进行定制 ...
- 2021.10.9-2021.10.15-本周代码+如何激励自己
目录 本周学术总结: 本周生活总结: 本周代码 本周学术总结: 本周完成了MOOC的翁恺老师C语言课程的1-7周,目前第七周的数组还有点问题,本周末可以把第八周干完,然后复习一下.这两天还要再规划一下 ...
- 2021.10.25-10.31 AI行业周刊(第69期):AI进化之路
本周<Opencv基础及AI项目实战>以及<Pytorch模型推理及多任务通用范式>两门课程已经完结. 两门课程中,针对所有完成作业的同学,都颁发了毕业证书. 并且对于完成比较 ...
- 2021.03.17 pokémon小游戏开发记录与周总结
2021.03.17 pokémon小游戏开发记录与周总结 此篇仅包含部分项目代码,只是个人的学习总结. 文章目录 2021.03.17 pokémon小游戏开发记录与周总结 前言 一.前期准备 二. ...
- Spring Boot安装及使用(2021.10.28)
Spring Boot安装及使用 2021.10.28 1.Spring Boot 简介 1.1 为何选择Spring? 1.2 Spring的功能 1.3 Spring项目的依赖包管理工具(Mave ...
最新文章
- C++中operator关键字(重载操作符)
- VC++使用静态库,msvcrt.lib连接错误
- Android之如何解决ScrollView起始位置不是最顶部的解决办法
- vim 强制保存只读文件
- 交换机和路由器的区别_秒懂交换机和路由器的功用区别 拷贝
- scala案例_Scala案例类和案例对象深入(第1部分)
- EPC901安装XP
- IOS OpenGL ES 图像扩展边缘彩色模糊 GPUImageRGBDilationFilter
- c语言中身高测试,测身高的C语言程序.doc
- [JZOJ1320] 【Usaco2009 gold 】拯救奶牛
- Meebo 和 GMail + Talk 等 WebIM 的实现方式
- 销售 小姐姐 给买家打分系统,用 Python Django 又整了一个花活
- 如何绘画Q版古风人物,超简单超实用,一学就会!
- 组战队,赢iPhone啦!
- VRTK_Example解释
- 一文学会网络分析——Co-occurrence网络图在R中的实现
- 高德地图车机版增加地标性品牌图标 让你“约会”无压力
- 新学:DES加密 小知识点(S盒,初始置换)
- Linux不是Windows(转载,强烈推荐…
- 疫情传播SEIR模型(python)