|
windows 10
pycharm
flask
sqlite
main.py
currentdirectory = os.path.dirname(os.path.abspath(__file__))
#create a Flask Instance
app = Flask(__name__)
#=====add database=====
app.config['SQLAlCHEMY_DATABASE_URI'] = 'sqlite:////Users/user/PycharmProjects/flask/users.db'
# app.config['SECRET_KET'] = 'password'
#secret key
app.secret_key = 'password'
#initialize the database
db = SQLAlchemy(app)
#creat model
class Users(db.Model):
id = db.Column(db.Integer, primary_key = True)
name = db.Column(db.String(200), nullable = False)
email = db.Column(db.String(120), nullable = False, unique = True)
date_added = db.Column(db.DateTime, default = datetime.utcnow)
def __init__(self, name, email, date_added):
self.name = name
self.email = email
self.date_added = date_added
#create a string
def __repr__(self):
return '<Name %r>' % self.name
class Config(object):
SQLALCHEMY_DATABASE_URI = 'sqlite:////Users/user/PycharmProjects/flask/users.db'
app.config.from_object(Config)
#Create a Form Class
class UserForm(FlaskForm):
name = StringField("Name", validators = [DataRequired()])
email = StringField("Email", validators = [DataRequired()])
submit = SubmitField('Submit')
#Create a Form Class
class NamerForm(FlaskForm):
name = StringField("What is your name", validators = [DataRequired()])
submit = SubmitField('Submit')
@app.route('/user/add', methods = ['GET', 'POST'])
def add_user():
name = None
#=====這個是根據上面的class UserForm(FlaskForm):=====
form = UserForm()
if form.validate_on_submit():
user = Users.query.filter_by(email = form.email.data).first()
if user is None:
user = Users(name = form.name.data, email = form.email.data)
db.session.add(user)
db.session.commit()
name = form.name.data
form.name.data = ''
form.email.data = ''
flash("User Added Successfully!")
our_users = Users.query.order_by(Users.date_added)
return render_template('add_user.html', form = form, name = name, our_users = our_users)
#create name page
@app.route('/name', methods = ['GET', 'POST'])
def name():
name = None
form = NamerForm()
#Validate form
if form.validate_on_submit():
name = form.name.data
form.name.data = ''
flash("Form Submitted Successfully")
return render_template("name.html", name = name, form = form)
if __name__ == '__main__':
app.run()
add_user.html
{%extends 'base.html'%}
{%block content%}
{%for message in get_flashed_messages()%}
<div class="alert alert-success alert-dismissible fade show" role="alert">
{{message}}
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
{%endfor%}
{%if name%}
<h1>Hello {{name}}!!</h1>
<br/>
<br/><br/>
{%else%}
<h1>User List:</h1>
<br/>
<form method = 'POST'>
{{form.hidden_tag()}}
{{form.name.label(class="form-label")}}
{{form.name(class="form-control")}}
<br/>
{{form.email.label(class="form-label")}}
{{form.email(class="form-control")}}
{{form.submit(class="btn btn-secondary")}}
</form>
<br/><br/><br/>
{%for our_user in our_users%}
{{our_user.id}}. {{our_user.name}} - {{our_user.email}}<br/>
{%endfor%}
{%endif%}
{%endblock%}
錯誤信息
C:\Users\user\PycharmProjects\flask\venv\Scripts\python.exe C:/Users/user/PycharmProjects/flask/hello.py
C:\Users\user\PycharmProjects\flask\venv\lib\site-packages\flask_sqlalchemy\__init__.py:851: UserWarning: Neither SQLALCHEMY_DATABASE_URI nor SQLALCHEMY_BINDS is set. Defaulting SQLALCHEMY_DATABASE_URI to "sqlite:///:memory:".
warnings.warn(
C:\Users\user\PycharmProjects\flask\venv\lib\site-packages\flask_sqlalchemy\__init__.py:872: FSADeprecationWarning: SQLALCHEMY_TRACK_MODIFICATI** adds significant overhead and will be disabled by default in the future. Set it to True or False to suppress this warning.
warnings.warn(FSADeprecationWarning(
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Running on http://127.0.0.1:5000
Press CTRL+C to quit
* Serving Flask app 'hello'
* Debug mode: off
127.0.0.1 - - [30/Sep/2022 08:52:10] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [30/Sep/2022 08:52:10] "GET /static/css/style.css HTTP/1.1" 304 -
127.0.0.1 - - [30/Sep/2022 08:52:10] "GET /favicon.ico HTTP/1.1" 404 -
127.0.0.1 - - [30/Sep/2022 08:52:11] "GET /user/add HTTP/1.1" 200 -
127.0.0.1 - - [30/Sep/2022 08:52:11] "GET /static/css/style.css HTTP/1.1" 304 -
[2022-09-30 08:52:14,098] ERROR in app: Exception on /user/add [POST]
Traceback (most recent call last):
File "C:\Users\user\PycharmProjects\flask\venv\lib\site-packages\flask\app.py", line 2525, in wsgi_app
resp**e = self.full_dispatch_request()
File "C:\Users\user\PycharmProjects\flask\venv\lib\site-packages\flask\app.py", line 1822, in full_dispatch_request
rv = self.handle_user_exception(e)
File "C:\Users\user\PycharmProjects\flask\venv\lib\site-packages\flask\app.py", line 1820, in full_dispatch_request
rv = self.dispatch_request()
File "C:\Users\user\PycharmProjects\flask\venv\lib\site-packages\flask\app.py", line 1796, in dispatch_request
return self.ensure_sync(self.view_functi**[rule.endpoint])(**view_args)
File "C:\Users\user\PycharmProjects\flask\hello.py", line 70, in add_user
user = Users(name = form.name.data, email = form.email.data)
TypeError: __init__() missing 1 required positional argument: 'date_added'
本人在實際操作按提交的時候,出現問題。請問是什麽原因呢?
|
|