TWILスパルタコードWeb開発+第4週

3521 ワード

早く書くべきだったのに、給料表の問題が遅れて、今になってやっと書きました.
3週目は復習の感じがして、ほとんど新しい内容がなくて、4週目は新しい機能がたくさんあって、3週目にいくつかの機能を分散してみんなに教えてほしいです.

1 Bulma


純粋なCSSフレームワークは、装飾の特化しているようです.トレーニングで使用されたバージョンは0.9.1ですが、公式サイトでは現在0.9.3が最新です
https://bulma.io/documentation/overview/start/からimportアドレスが調べられます.

2ハッシュ関数


任意のデータを受信し、常に固定長の任意の値に変換する関数です.
アカウントパスワードを保存する際、DBでパスワードを見てもすぐに認識できないようにパスワードのハッシュ値をDBに保存します.
import hashlib

pw_hash = hashlib.sha256(비밀번호.encode('utf-8')).hexdigest()
文字列をencodeに変換しない限りsha 256を使用して暗号化することはできません
sha 256自体がobjectなのでhexdigest()が必要です
hash = hashlib.sha256()
hash.update(b"해시화할 값")
hash.hexdigest()
これでもいいようです.

3 JWT/トークン


ログイン・ユーザーに対してサーバ上でトークンを発行し、ユーザーが有効であることを確認できます.
ユーザは,Webページや機能にアクセスするとCookieに格納されたトークン情報をサーバに送信するが,トークンが有効であることを確認すれば,ページや機能へのアクセスを許可/禁止することができる.
レッスンではJSONWeb Token(JWT)を使用
  • ログイントークン発行量
  • @app.route('/sign_in', methods=['POST'])
    def sign_in():
        username_receive = request.form['username_give']
        password_receive = request.form['password_give']
        pw_hash = hashlib.sha256(password_receive.encode('utf-8')).hexdigest()
        result = db.users.find_one({'username': username_receive, 'password': pw_hash})
        
        # 아이디 비밀번호가 맞는 계정이 있으면
        if result is not None:
            payload = {
                'id': username_receive,
                'exp': datetime.utcnow() + timedelta(seconds=60 * 60 * 24)  # 로그인 24시간 유지
            }
            # SECRET_KEY가 있어야 추후 토큰 검증이 가능한데, 임의의 문자열로 가능하다
            token = jwt.encode(payload, SECRET_KEY, algorithm='HS256')
    
            return jsonify({'result': 'success', 'token': token})
        else:
            return jsonify({'result': 'fail', 'msg': '아이디/비밀번호가 일치하지 않습니다.'})
  • サービス確認トークン
  • を使用する.
    @app.route('/posting', methods=['POST'])
    def posting():
    	# 이건 클라이언트 쪽에서 받을 때 $.cookie('mytoken', response['token'], {path:'/'}) 로 받았기 때문에 mytoken
       	token_receive = request.cookies.get('mytoken')
    	try:
    		# 토큰 검증
    		payload = jwt.decode(token_receive, SECRET_KEY, algorithms=['HS256'])
    		user_info = db.users.find_one({"username": payload["id"]})
    		... (작업)
    		return jsonify({"result": "success", 'msg': '포스팅 성공'})
    	
    	# 토큰이 만료되었거나 검증 실패한 경우
    	except (jwt.ExpiredSignatureError, jwt.exceptions.DecodeError):
    		return redirect(url_for("home"))

    4条件3項演算子(ternary operator)


    Javascriptでは、単純な条件文の場合、True/Felseで次のように値をロードできます.
    # 조건이 True면 : 앞의 값을, False
    condition ? exprIfTrue : exprIfFalse 
    
    #다중 조건도 처리가 가능하다. Excel의 if 중첩을 생각하면 쉬울듯
    condition1 ? value1 : condition2 ? value2 : condition3 ? value3 : value4;

    5その他

  • pymongo値ソートと数量制限-sort,limit
  • # 결과값 뒤에 바로 .sort, .limit을 붙여주면 된다 
    # -1은 내림차순, 1은 오름차순
    list(db.posts.find({}).sort("정렬 기준", -1).limit(갯수 제한))
    
    # 여러 기준에 대해 정렬도 가능하다
    # pymongo.ASCENDING / DECENDING 으로도 오름/내림차순을 정할 수 있다
    list(db.posts.find({}).sort([("정렬 기준 1", pymongo.ASCENDING), 
    				("정렬 기준2",pymongo.DESCENDING)]).limit(갯수 제한))