[SGALLERY]DAY05
ファイルをアップロードして保存します。
ファイルアップロードコードは、他のデータを格納するコードとは少し異なるという.
ファイル自体をmongo DBに保存するのではなく、ファイル名を保存する必要があります.
この場合、変換作業が必要です.
まず.
from werkzeug.utils import secure_filename
from datetime import datetime
追加します.file = request.files["file_give"]
save_to = 'static/my.jpg'
file.save(save_to)
ファイルの保存中に名前を変更します.この場合、コードを変換する必要があります.
まず、拡張子を削除します.
extension = file.filename.split('.')[-1]
保存した日付と時刻を使用して新しい名前を作成します.today = datetime.now()
mytime = today.strftime('%Y-%m-%d-%H-%M-%S')
filename = f'file-{mytime}'
新しい名前ができたら保存しなければなりません.上部コードにいくつかの変更があります.
save_to = f'static/{filename}.{extension}'
file.save(save_to)
docセクションに「img」:f「{filename}.{extension}」を追加します.dbにdocを追加する文の下に「f.save(secure filename(f.filename)」を追加すると完了します.
doc = {
'img': f'{filename}.{extension}',
'title': title_receive,
'ncity': ncity_receive,
'story': story_receive,
'address': address_receive
}
db.sgalls.insert_one(doc)
f.save(secure_filename(f.filename))
イメージファイルがどのように保存されているかをMongoDBで確認します.名前を日付と保存時間に変更して保存します.
savepic、都市別保存。
各ページを都市別に印刷したいです.
postページに記事と写真を入力すると、MongoDBにncityがどのように格納されているかを決定できます.
例えば、ニューヨークhtmlを見てみましょう.
function cardpic() {
$.ajax({
type: "GET",
url: `/gall?ncity=newyork`,
/gallに格納されているデータをインポートします.ncityはnewyorkに格納されているデータのみをインポートして出力します.だから、/callの後ろで分類するためにurl部分は?ncity=newyorkはランダムに自分のid値をくれました.
cardpicという関数を作成しました.
@app.route('/gall', methods=['GET'])
def cardpic():
ncity = {'newyork': 'Newyork', 'la': 'LosAngeles', 'seattle': 'Seattle'}
sgalls = list(db.sgalls.find({'ncity': ncity[request.args['ncity']]}))
for elem in sgalls:
elem['_id'] = str(elem['_id'])
return jsonify({'sgalls':sgalls})
cardpicを見るとncityで「ニューヨークはdbに格納されているニューヨークです!」このように保存します.ということで.ncity=(都市名)設定のページでは、対応するデータのみを選択して表示します.これらのデータはすべてsgollsに格納されています.
db.sgalls.findはコードを使用してsgolsのncityを要求します.
id値を検索します。
MongoDBは、データごとにid値を提供します.
これによりidはObjectIdと表記される.
各データのIDをサーバーアドレスの後ろに貼って、カードテンプレートの写真やタイトルをクリックすると、詳細ページにアクセスできます.
ただしObjectIdは直接使用できません.
string文字列に変換し、URLの後ろにあるid値を受信します.
idを再変換し、対応するデータをページに出力する必要があります.
次にfind oneを使用してデータの1つを検索します.
ここでも先に.
from bson import ObjectId
上のセクションに追加します.@app.route('/coll', methods= ['GET'])
def viewpic():
sgall = db.sgalls.find_one({'_id': ObjectId(request.args['id'])})
sgall['_id'] = str(sgall['_id'])
return jsonify ({'sgall':sgall})
この機会にMongoDBで受信したObjectIdを利用してurl id値を抽出する方法を知りました.サーバー・アドレスを作成します。
各ページにサーバアドレスを作成する必要があります.view.pyを実行すると、すべてのページが実行されます.
@app.route('/')
def main():
return render_template('SGmain.html')
@app.route('/gohome')
def home():
return render_template('SGhome.html')
@app.route('/posting')
def posting():
return render_template('SGpost.html')
@app.route('/view/1')
def picture_view():
return render_template('SGnyc.html')
@app.route('/view/2')
def picture_view01():
return render_template('SGla.html')
@app.route('/view/3')
def picture_view02():
return render_template('SGsea.html')
@app.route('/gall1')
def load():
return render_template('SGgall01.html')
Reference
この問題について([SGALLERY]DAY05), 我々は、より多くの情報をここで見つけました https://velog.io/@flybcloud1024/SGALL-05テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol