파이썬 플라스크 파일 체크섬
40750 단어 beginnerswebdevprogrammingpython
내가 사용할 체크섬
SHA256
의 경우 원하는 알고리즘을 사용할 수 있습니다. 여기에서 코드를 찾을 수 있습니다GitHub Repo.응용 프로그램을 시작하겠습니다.
새로운 디렉토리를 만들고 들어가십시오.
mkdir flask-checksum && cd flask-checksum
가상 환경 초기화
python -m venv vnev
또는
virtualenv venv
virtualenv 활성화
source venv/bin/activate
이제 플라스크를 설치할 시간입니다.
pip install flask
이제 응용 프로그램을 위한 디렉터리 구조를 만들 시간입니다. 간단하게 만들겠습니다.
📦flask-checksum
┣ 📂static
┃ ┣ 📂css
┃ ┣ 📂js
┃ ┗ 📂uploads
┣ 📂templates
┃ ┣ 📂includes
┃ ┣ 📂layouts
┃ ┗ 📂pages
┗ 📜app.py
이 프로젝트에 대한 CSS 및 Js 파일을 각각
static/css
및 static/js
에 다운로드하고 배치합니다. 그 후 디렉토리 구조는 다음과 같습니다.📦static
┣ 📂css
┃ ┗ 📜bootstrap.min.css
┣ 📂js
┃ ┗ 📜bootstrap.bundle.min.js
┗ 📂uploads
┃ ┗ 📜.gitignore
이제 열기
app.py
애플리케이션 빌드를 시작하고 이 코드 줄은 브라우저에 hello, world의 출력을 표시합니다.from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return "Hello, World"
if __name__ == '__main__':
app.run()
이 응용 프로그램을 실행하십시오.
python app.py
이렇게 하면 서버가 시작되고 이 URL127.0.0.1:5000에서 애플리케이션에 액세스할 수 있습니다.
templates/layouts
create app.html
파일에서 응용 프로그램에 대한 템플릿을 만들 시간입니다. 이것은 응용 프로그램의 마스터 레이아웃이 될 것입니다. 이 모든 템플릿은 이 템플릿을 확장합니다.app.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{% block title %}{% endblock %}</title>
<link rel="stylesheet" href="{{ url_for('static', filename='css/bootstrap.min.css') }}">
</head>
<body class="bg-white-500">
{% include 'includes/navbar.html' %}
<div class="container">
{% block content %}{% endblock %}
</div>
<script src="{{ url_for('static', filename='js/bootstrap.bundle.min.js') }}"></script>
</body>
</html>
navbar.html
에 파일templates/includes
을 생성합니다.navbar.html
<nav class="navbar navbar-expand-lg navbar-dark bg-primary">
<div class="container">
<a class="navbar-brand" href="{{ url_for('create_checksum') }}">File CheckSum</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav ms-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link {% if request.endpoint == 'create_checksum' %} active {% endif %}" aria-current="page" href="{{ url_for('create_checksum') }}">Create</a>
</li>
<li class="nav-item">
<a class="nav-link {% if request.endpoint == 'verify_checksum' %} active {% endif %}" href="{{ url_for('verify_checksum') }}">Verify</a>
</li>
</ul>
</div>
</div>
</nav>
이제 체크섬을 생성하기 위한 애플리케이션과 확인을 위한 두 번째 템플릿이 두 개 더 필요합니다.
templates/pages
에 두 개의 파일을 더 생성해 보겠습니다. 첫 번째는 create.html
이고 두 번째는 verify.html
입니다.create.html
{% extends 'layouts/app.html' %}
{% block title %} Create CheckSum {% endblock %}
{% block content %}
<div class="row py-5">
<div class="col-md-8 offset-md-2 col-sm-12">
<div class="card shadow">
<div class="card-body">
<h5 class="card-title">
Create CheckSum
</h5>
<form action="{{ url_for('create_checksum') }}" method="post" enctype="multipart/form-data">
<div class="mb-3">
<label for="formFile" class="form-label">File</label>
<input class="form-control" type="file" id="formFile" name="file">
</div>
<div class="mb-3 float-end">
<button class="btn btn-primary" type="submit">create</button>
</div>
</form>
</div>
</div>
{% if checksum %}
<div class="card shadow mt-3">
<div class="card-body">
<h4 class="card-title">your CheckSum</h4>
<p class="bg-primary p-3 text-white">{{ checksum }}</p>
</div>
</div>
{% endif %}
</div>
</div>
{% endblock %}
verify.html
{% extends 'layouts/app.html' %}
{% block title %} Verify CheckSum {% endblock %}
{% block content %}
<div class="row py-5">
<div class="col-md-8 offset-md-2 col-sm-12">
<div class="card shadow">
<div class="card-body">
<h5 class="card-title">
Verify CheckSum
</h5>
<form action="{{ url_for('verify_checksum') }}" method="post" enctype="multipart/form-data">
<div class="mb-3">
<label for="formFile" class="form-label">File</label>
<input class="form-control" type="file" id="formFile" name="file">
</div>
<div class="mb-3">
<label for="checksum">CheckSum</label>
<input type="text" name="checksum" class="form-control" placeholder="CheckSum">
</div>
<div class="mb-3 float-end">
<button class="btn btn-primary" type="submit">Verify</button>
</div>
</form>
</div>
</div>
{% if status != None %}
<div class="card shadow mt-3">
<div class="card-body">
{% if status %}
<div class="alert alert-success">Your file is authentic.</div>
{% else %}
<div class="alert alert-danger">Your file is not authentic.</div>
{% endif %}
</div>
</div>
{% endif %}
</div>
</div>
{% endblock %}
따라서
templates
디렉토리 구조는 다음과 같습니다.📦templates
┣ 📂includes
┃ ┗ 📜navbar.html
┣ 📂layouts
┃ ┗ 📜app.html
┗ 📂pages
┃ ┣ 📜create.html
┃ ┗ 📜verify.html
이제 애플리케이션의 기본 로직을 생성하여
app.py
의 체크섬 생성과 파일의 이 함수로 시작합니다.@app.route('/', methods=['GET', 'POST'])
def create_checksum():
checksum = None
if request.method == 'POST':
file = request.files['file']
new_name = secure_filename(file.filename)
file.save('static/uploads/'+new_name)
checksum = sha256(new_name)
os.remove('static/uploads/'+new_name)
return render_template('pages/create.html', checksum=checksum)
이 기능을 추가하면
app.py
가 다음과 같이 표시됩니다.from flask import Flask, render_template, request
from werkzeug.utils import secure_filename
import hashlib
import os
app = Flask(__name__)
@app.route('/', methods=['GET', 'POST'])
def create_checksum():
checksum = None
if request.method == 'POST':
file = request.files['file']
new_name = secure_filename(file.filename)
file.save('static/uploads/'+new_name)
checksum = sha256(new_name)
os.remove('static/uploads/'+new_name)
return render_template('pages/create.html', checksum=checksum)
if __name__ == '__main__':
app.run(debug=True)
이제 체크섬을 확인하기 위한 두 번째 함수를 만듭니다.
@app.route('/verify-checksum', methods=['GET', 'POST'])
def verify_checksum():
status = None
if request.method == 'POST':
file = request.files['file']
checksum = request.form.get('checksum')
new_name = secure_filename(file.filename)
file.save('static/uploads/' + new_name)
new_checksum = sha256(new_name)
status = checksum == new_checksum
os.remove('static/uploads/' + new_name)
return render_template('pages/verify.html', status=status)
이 기능을 추가하면
app.py
가 다음과 같이 표시됩니다.from flask import Flask, render_template, request
from werkzeug.utils import secure_filename
import hashlib
import os
app = Flask(__name__)
@app.route('/', methods=['GET', 'POST'])
def create_checksum():
checksum = None
if request.method == 'POST':
file = request.files['file']
new_name = secure_filename(file.filename)
file.save('static/uploads/'+new_name)
checksum = sha256(new_name)
os.remove('static/uploads/'+new_name)
return render_template('pages/create.html', checksum=checksum)
@app.route('/verify-checksum', methods=['GET', 'POST'])
def verify_checksum():
status = None
if request.method == 'POST':
file = request.files['file']
checksum = request.form.get('checksum')
new_name = secure_filename(file.filename)
file.save('static/uploads/' + new_name)
new_checksum = sha256(new_name)
status = checksum == new_checksum
os.remove('static/uploads/' + new_name)
return render_template('pages/verify.html', status=status)
if __name__ == '__main__':
app.run(debug=True)
이제 해싱을 담당할 애플리케이션의 주요하고 중요한 기능에 대한 시간입니다.
def sha256(file_name):
hash_sha256 = hashlib.sha256()
with open('static/uploads/'+file_name, "rb") as f:
for chunk in iter(lambda: f.read(4096), b""):
hash_sha256.update(chunk)
return hash_sha256.hexdigest()
이 기능을 추가하면
app.py
가 다음과 같이 표시됩니다.from flask import Flask, render_template, request
from werkzeug.utils import secure_filename
import hashlib
import os
app = Flask(__name__)
@app.route('/', methods=['GET', 'POST'])
def create_checksum():
checksum = None
if request.method == 'POST':
file = request.files['file']
new_name = secure_filename(file.filename)
file.save('static/uploads/'+new_name)
checksum = sha256(new_name)
os.remove('static/uploads/'+new_name)
return render_template('pages/create.html', checksum=checksum)
@app.route('/verify-checksum', methods=['GET', 'POST'])
def verify_checksum():
status = None
if request.method == 'POST':
file = request.files['file']
checksum = request.form.get('checksum')
new_name = secure_filename(file.filename)
file.save('static/uploads/' + new_name)
new_checksum = sha256(new_name)
status = checksum == new_checksum
os.remove('static/uploads/' + new_name)
return render_template('pages/verify.html', status=status)
def sha256(file_name):
hash_sha256 = hashlib.sha256()
with open('static/uploads/'+file_name, "rb") as f:
for chunk in iter(lambda: f.read(4096), b""):
hash_sha256.update(chunk)
return hash_sha256.hexdigest()
if __name__ == '__main__':
app.run(debug=True)
이제 애플리케이션을 실행할 시간입니다.
python app.py
http://127.0.0.1:5000
나와 함께 해주셔서 감사합니다.
Flask를 배우고 싶다면 내 시리즈를 시작했습니다. 확인하십시오.
여러분이 생각하는 것, 질문 및 제안 사항을 자유롭게 적어야 합니다.
감사합니다 🤗
Reference
이 문제에 관하여(파이썬 플라스크 파일 체크섬), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/muhammadsaim/python-flask-file-checksum-3fpf텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)