版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
注册账户后可访问私人网盘,树莓派
实现功能:在网页注册成功后,树莓派自行创建专属于该账户的储存空间(相当于网盘),在windows中的网上邻居可访问。
建议先阅读,http://blog.csdn.net/klli15/article/details/78009455
环境
- python
- flask
- samba
- MySQL
环境安装
sudo pip install Flask # 安装flask
Mysql的安装请参考 http://blog.csdn.net/klli15/article/details/78009418
samba的安装和配置请参考 http://blog.csdn.net/klli15/article/details/78009455
安装依赖python 库
- MySQLdb 的安装:http://www.jb51.net/article/48827.htm,用于操作Mysql
- Pexpect的安装
sudo pip install pexpect
,用于创建用户过程中自动输入密码以完成网盘的创建
编辑注册页面
只用于测试,不求美观
<!DOCTYPE html>
<html>
<head>
<title>注册</title>
</head>
<body>
<form action="../check" method="post">
注册:<input type="text" name="name" required="required">
密码:<input type="password" name="pass" required="required">
<input type="submit" >
</form>
</body>
</html>
编辑Python脚本处理网页请求
#check.py
# coding: utf-8
from flask import Flask
from flask import request
from flask import send_file
import MySQLdb
import pexpect
import os
app=Flask(__name__)
@app.route('/index')
def index():
return send_file('register.html') # 注册页面
@app.route("/check",methods=['POST', 'GET'])
def hello_word():
#return request.form['name']
RName=request.form['name'] #获取表单数据
RPassword= request.form['pass']
isExit=0
#return "hello#2"
db=MySQLdb.connect("localhost",'root','password','user_infor') #登录mysql
cursor = db.cursor() #获取游标
cursor.execute('select * from user') # 执行Mysql语句
exits=cursor.fetchall() #获取所有的数据
for i in exits: #防止重复注册
name=i[1]
if(RName==name):
isExit=1
break
if (isExit==1):
return 'registed'
os.system("sudo mkdir /home/pi/share/"+RName) #创建私人网盘
#os.system("sudo chmod a+w /home/pi/"+RName)
os.system("sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak") #备份
fp=open('/etc/samba/smb.conf',"a") #追加配置文件
tempStr="""[%s]
path=/home/pi/share/%s
read only =no
writable = yes
public=no
valid users=%s
"""%(RName,RName,RName)
fp.write("\n"+tempStr)
fp.close()
os.system("sudo useradd "+RName) #smb用户要求必须要linux系统用户
child=pexpect.spawn("sudo smbpasswd -a "+RName)
child.expect("New SMB password:") #自行输入密码
child.sendline(str (RPassword)) #记得要变为字符串
child.expect("Retype new SMB password:")
child.sendline(str(RPassword))
os.system("sudo /etc/init.d/samba retsart") #重启samba服务
#完成之后写进数据库,以免重复注册
sql="""INSERT INTO user(name,password)VALUES ('%s','%s')"""%(RName,RPassword)
try:
cursor.execute(sql)
db.commit() #交予数据库处理数据
# return 'hello world'
except:
db.rollback()
return "failed"
db.close()
return "successful"
if __name__=='__main__':
app.run(debug=True,port=8181,host="192.168.137.220")
flask 文档:http://docs.jinkan.org/docs/flask
pexpect 使用实例:http://blog.csdn.net/xj626852095/article/details/51271541
执行脚本
sudo python check.py
访问注册页面
浏览器打开 hosts:port/index
,如192.168.137.220:8181/index
输入账号密码,提交后显示“successful”
访问网盘
- 方法一
- win+R(即“运行”快捷键)
- 输入
\\树莓ip地址\账号
如\\192.168.137.220\15klli
- 输入15klli用户的账号密码
- 方法二
- 打开windows的网上论据
- 双击 RASPBERRYPI
- 输入账号密码