PythonAnywhere中部署文件上传网站,将上传的文件到网站中,保存在数据库,当访问url时,要求输入固定口令666即可访问文件目录选择要下载的文件,点击即可下载,完成这个项目需要添加几个文件,每个文件的代码是多少
时间: 2024-03-22 21:37:13 浏览: 28
完成这个项目,需要添加以下文件:
1. `upload.html`:上传文件的页面模板
2. `upload.py`:处理文件上传的 Python 脚本
3. `download.html`:显示下载页面的页面模板
4. `download.py`:处理文件下载的 Python 脚本
5. `models.py`:定义数据库模型
以下是每个文件的代码示例:
1. `upload.html`
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>上传文件</title>
</head>
<body>
<h1>上传文件</h1>
<form action="{{ url_for('upload') }}" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="上传">
</form>
</body>
</html>
```
2. `upload.py`
```python
from flask import Flask, render_template, request, redirect, url_for
from werkzeug.utils import secure_filename
from models import db, File
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///files.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['SECRET_KEY'] = 'secret_key'
app.config['UPLOAD_FOLDER'] = 'uploads'
db.init_app(app)
@app.route('/')
def index():
return render_template('upload.html')
@app.route('/upload', methods=['POST'])
def upload():
file = request.files['file']
filename = secure_filename(file.filename)
file.save(app.config['UPLOAD_FOLDER'] + '/' + filename)
f = File(name=filename)
db.session.add(f)
db.session.commit()
return redirect(url_for('index'))
if __name__ == '__main__':
app.run()
```
3. `download.html`
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>下载文件</title>
</head>
<body>
<h1>下载文件</h1>
<form action="{{ url_for('download') }}" method="post">
<input type="text" name="password" placeholder="请输入密码">
<input type="submit" value="提交">
</form>
{% if files %}
<h2>可下载文件列表</h2>
<ul>
{% for file in files %}
<li><a href="{{ url_for('download', password=password, filename=file.name) }}">{{ file.name }}</a></li>
{% endfor %}
</ul>
{% endif %}
</body>
</html>
```
4. `download.py`
```python
from flask import Flask, render_template, request, send_from_directory
from models import db, File
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///files.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['SECRET_KEY'] = 'secret_key'
app.config['UPLOAD_FOLDER'] = 'uploads'
db.init_app(app)
@app.route('/')
def index():
return render_template('download.html')
@app.route('/download', methods=['POST', 'GET'])
def download():
if request.method == 'POST':
password = request.form['password']
if password != '666':
return '密码错误'
files = File.query.all()
return render_template('download.html', files=files, password=password)
elif request.method == 'GET':
password = request.args.get('password')
if password != '666':
return '密码错误'
filename = request.args.get('filename')
return send_from_directory(app.config['UPLOAD_FOLDER'], filename)
if __name__ == '__main__':
app.run()
```
5. `models.py`
```python
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
class File(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(100), nullable=False)
db.create_all()
```