점프 투 플라스크 회원가입 기능 추가하기 질문
models.py
from pybo import db
class Question(db.Model):
id = db.Column(db.Integer, primary_key=True)
subject = db.Column(db.String(200), nullable=False)
content = db.Column(db.Text(), nullable=False)
create_date = db.Column(db.DateTime(), nullable=False)
class Answer(db.Model):
id = db.Column(db.Integer, primary_key=True)
question_id = db.Column(db. Integer,
db.ForeignKey('question.id', ondelete='CASCADE'))
question = db.relationship('Question', backref=db.backref('answer_set',))
content = db.Column(db.Text(), nullable=False)
create_date = db.Column(db.DateTime(), nullable=False)
class User(db.Model):
id= db.Column(db.Integer, primary_key=True)
username= db.Column(db.String(150), unique=True, nullable=False)
password= db.Column(db.String(200), nullable=False)
email=db.Column(db.String(120),unique=True, nullable=False)
forms.py
from flask_wtf import FlaskForm
from wtforms import StringField, TextAreaField, PasswordField
from wtforms.fields.html5 import EmailField
from wtforms.validators import DataRequired, Length, EqualTo, Email
class QuestionForm(FlaskForm):
subject = StringField('제목', validators=[
DataRequired('제목은 필수 입력 항목입니다.')])
content = TextAreaField('내용', validators=[
DataRequired('내용은 필수 입력 항목입니다.')])
class AnswerForm(FlaskForm):
content = TextAreaField('내용', validators=[
DataRequired('내용은 필수입력 항목입니다.')])
class UserCreateForm(FlaskForm):
username=StringField('사용자이름', validators=[
DataRequired(), Length(min=3, max=25)])
password1=PasswordField('비밀번호',validators=[
DataRequired(), EqualTo('password2', '비밀번호가 일치하지 않습니다')])
password2=PasswordField('비밀번호확인', validators=[DataRequired()])
email = EmailField('이메일', [DataRequired(), Email()])
auth_views.py
from flask import Blueprint, url_for, render_template, flash, request
from werkzeug.security import generate_password_hash
from werkzeug.utils import redirect
from pybo import db
from pybo.forms import UserCreateForm
from pybo.models import User
bp=Blueprint('auth', __name__, url_prefix='/auth')
@bp.route('/signup/', methods=('GET', 'POST'))
def signup():
form=UserCreateForm()
if request.method=='POST' and form.validate_on_submit():
user = User.query.filter_by(username=form.username.data).first()
if not user:
user=User(username=form.username.data,
password=generate_password_hash(form.password1.data),
email=form.email.data)
db.session.add(user)
db.session.commit()
return redirect(url_for('main.index'))
else:
flash('이미 존재하는 사용자입니다.')
return render_template('auth/signup.html', form=form)
init.py
from flask import Flask
from flask_migrate import Migrate
from flask_sqlalchemy import SQLAlchemy
import config
db=SQLAlchemy()
migrate=Migrate()
def create_app():
app = Flask(__name__)
app.config.from_object(config)
#ORM
db.init_app(app)
migrate.init_app(app,db)
from . import models
#블루프린트
from .views import main_views, question_views, answer_views, auth_views
app.register_blueprint(main_views.bp)
app.register_blueprint(question_views.bp)
app.register_blueprint(answer_views.bp)
app.register_blueprint(auth_views.bp)
#필터
from.filter import format_datetime
app.jinja_env.filters['datetime']=format_datetime
return app
명령 프롬프트에서 flask run을 하면 자꾸 ModuleNotFoundError: No module named 'wtforms.fields.html' 이라는 오류가 뜹니다. 왜 그럴까요? ㅠㅠㅠㅠㅠㅠ
랑 님 421
M 2021년 12월 28일 11:22 오전
wtforms가 버전 업그레이드 되면서 바뀐 부분이 있습니다. 자세한 내용은 다음 페이지의 중요공지를 참고하세요.
https://wikidocs.net/81057#_2
-
박응용님,
2021년 12월 28일 2:25 오후
추천
,
대댓글
@박응용님 감사합니다!
-
랑님,
2021년 12월 28일 6:10 오후
추천
,
대댓글