TWILスパルタコードWeb開発+第4週
3521 ワード
早く書くべきだったのに、給料表の問題が遅れて、今になってやっと書きました.
3週目は復習の感じがして、ほとんど新しい内容がなくて、4週目は新しい機能がたくさんあって、3週目にいくつかの機能を分散してみんなに教えてほしいです.
純粋なCSSフレームワークは、装飾の特化しているようです.トレーニングで使用されたバージョンは0.9.1ですが、公式サイトでは現在0.9.3が最新です
https://bulma.io/documentation/overview/start/からimportアドレスが調べられます.
任意のデータを受信し、常に固定長の任意の値に変換する関数です.
アカウントパスワードを保存する際、DBでパスワードを見てもすぐに認識できないようにパスワードのハッシュ値をDBに保存します.
sha 256自体がobjectなのでhexdigest()が必要です
ログイン・ユーザーに対してサーバ上でトークンを発行し、ユーザーが有効であることを確認できます.
ユーザは,Webページや機能にアクセスするとCookieに格納されたトークン情報をサーバに送信するが,トークンが有効であることを確認すれば,ページや機能へのアクセスを許可/禁止することができる.
レッスンではJSONWeb Token(JWT)を使用ログイントークン発行量 サービス確認トークン を使用する.
Javascriptでは、単純な条件文の場合、True/Felseで次のように値をロードできます. pymongo値ソートと数量制限-sort,limit
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その他
# 결과값 뒤에 바로 .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(갯수 제한))
Reference
この問題について(TWILスパルタコードWeb開発+第4週), 我々は、より多くの情報をここで見つけました https://velog.io/@chaoz/TWIL스파르타코딩-웹개발-플러스-4주차テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol