Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- 항해99솔직후기 #항해99 #부트캠프추천
- 부트스트랩 #Bootstrap #웹개발첫걸음 #스파르타코딩클럽
- 스파르타코딩클럽 #크롤링 #스크래핑
- #내일배움단 #코딩프로젝트 #국비지원 #내일배움카드 #스파르타코딩클럽
- 스파르타코딩클럽 #코딩 #jQuery #Ajax
Archives
- Today
- Total
이모저모
Flask WTF - Form layout 본문
0. __init__.py
from flask import Flask, render_template
from flask_wtf.csrf import CSRFProtect
csrf = CSRFProtect()
def create_app():
print("run:create_app()")
app = Flask(__name__)
# csrf 방어 토큰을 만들기 위해 secret key 필요하고, 이 아이는 flask에서의 secret key 사용할 수 있다고 .
app.config['SECRET_KEY'] = 'secretkey'
# 이 조건을 달지 않으면, css같은 사항 변화를 12시간마다 체크한다. 즉 디버깅모드에서는 불편하므로, 디버깅시에는 1초로 변경하는 것.
if app.config['DEBUG']:
app.config['SEND_FILE_MAX_AGE_DEFAULT'] = 1
''' CSRF init '''
csrf.init_app(app)
@app.route('/')
def index():
return render_template("index.html")
from gogglekaap.forms.auth_form import LoginForm, RegisterForm
@app.route('/auth/login', methods=['GET', 'POST'])
def login():
form = LoginForm()
# Request.method = POST 이고, validate OK이면 -- 이라는 뜻
if form.validate_on_submit():
# TODO
# 1. 유저조회
# 2. 존재하는 유저인지 체크
# 3. 패스워드 정합 확인
# 4. 로그인 유지 (세션)
user_id = form.data.get('user_id')
password = form.data.get('password')
return f"{user_id}, {password}"
else:
# TODO :Error
pass
return render_template('login.html', form=form)
@app.route('/auth/logout')
def logout():
return 'logout'
@app.route('/auth/register', methods=['GET', 'POST'])
def register():
form = RegisterForm()
if form.validate_on_submit():
# TODO
# 1. 유저조회
# 2. 유저 이미 존재하는지 체크
# 3. 없으면 유저 생성
# 4. 로그인 유지 (세션)
user_id = form.data.get('user_id')
password = form.data.get('password')
repassword = form.data.get('repassword')
user_name = form.data.get('user_name')
return f"{user_id}, {password}, {repassword}, {user_name}"
else:
# TODO :Error
pass
return render_template('register.html', form=form)
@app.errorhandler(404)
def page_404(error):
return render_template("404.html"), 404
return app
1. auth_form.py
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField
from wtforms.validators import DataRequired, EqualTo
class LoginForm(FlaskForm):
user_id = StringField('User Id', validators=[DataRequired()])
password = PasswordField('Password', validators=[DataRequired()])
class RegisterForm(LoginForm):
password = PasswordField(
'Password',
validators=[DataRequired(),
EqualTo('repassword',
message='Password must match')]
)
repassword = PasswordField(
'Confirm Password',
validators=[DataRequired()])
user_name = StringField('User Name', validators=[DataRequired()])
2. login.html
<!--url_for에는 함수명이 들어간다!!-->
<form method="post" action="{{ url_for('login') }}">
{{ form.csrf_token }}
{{ form.user_id.label }} {{ form.user_id(minlength=4, maxlength=20) }}
{{ form.password.label }} {{ form.password(minlength=4, maxlength=20) }}
{{ form.errors }}
<input type="submit" value="go">
</form>
3. register.html
<!--url_for에는 함수명이 들어간다!!-->
<form method="post" action="{{ url_for('register') }}">
{{ form.csrf_token }}
{{ form.user_id.label }} {{ form.user_id(minlength=4, maxlength=20) }}
{{ form.user_name.label }} {{ form.user_name(minlength=4, maxlength=20) }}
{{ form.password.label }} {{ form.password(minlength=4, maxlength=20) }}
{{ form.repassword.label }} {{ form.repassword(minlength=4, maxlength=20) }}
{{ form.errors }}
<input type="submit" value="go">
</form>
'coding' 카테고리의 다른 글
Flask - Blueprint를 통한 Routing 확장 (0) | 2022.01.06 |
---|---|
Flask WTF - CSRF 방어하기 (0) | 2022.01.05 |
python - flask에서 app.config['SEND_FILE_MAX_AGE_DEFAULT'] (0) | 2022.01.05 |
flask request _ hook, application context (0) | 2022.01.04 |
flask - 기본 routings (0) | 2022.01.04 |
Comments