[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')