แฌแแแ แ แแแแแแแแแ แแแแจแ แฃแแแ แฌแแแแฌแงแแแ แแ แ แคแแแแจแ แแแแ แแแแแก แแแแแก แแแแ แแแแแแก แแ แแแแแแแก, แ แแช แกแแแฃแจแแ แแ แแชแแกแก แแ แแแแแก แแฆแฅแแแก แแ แแชแแกแก แแ แแฃแแแแก. แ แแช แฃแคแ แ แแแ แแแแ แแ แแแฅแขแ แแแแแจแ, แแแ แฃแคแ แ แซแแแแ แแฉแแแก แแก แแ แแแแแแ แแแแก. แจแแกแแแแแแกแแ, แแ แแแฅแขแแก แแแฌแงแแแแแแ แแแคแแฅแ แแ แแ แแแ แแแแก แแ แแฅแขแแแฃแ แกแขแ แฃแฅแขแฃแ แแแแชแแแกแ แแ แแแแแก แแแขแแแแแแชแแแแ. แฌแแแ แแแแแแจแ แแแแแชแแแแ แ แแแแแแแแแ แแแแแแก, แแฆแแก แแ แแ แงแแแแแคแแ แก แแแแแแแขแแแ flask แแแแแแแชแแแก แกแขแ แฃแฅแขแฃแ แแแแชแแแก แแ แ-แแ แ แคแแ แแแก (แแแคแฃแซแแแแฃแแแ flask-แแก แแแแ แจแแแแแแแแแแแฃแ แแ แแแฅแขแแก แกแขแ แฃแฅแขแฃแ แแแ) แแ แแแแแ แแแแแแแ แแ แชแแแแแก แแ แ แแ แแแฅแขแจแ.
[TOC]
แฌแแแ แแแแจแ แซแแแแแ แแแแ แ แ แแ แแแแแแแ แแแแ แซแแ แแแแ app
/portal.py
-แจแ. แแแฃแฎแแแแแแ แแแแกแ แ แแ แคแแ แแแแแก แแแแแ แแขแแ แ แชแแแแ form.py
แคแแแแจแ แแแแแขแแแแ, แ แแช แกแขแ แฃแฅแขแฃแ แแแแชแแแก แซแแแแแ แแแ แแ แแ แแฅแขแแแแ, แแแแแแ แคแแแแจแ แแแแแ แแแแ แ แ แแ แแแแแ แฉแ แแแกแแแแแแแแแแแ.
แ แแแแ แช แจแแแแแแฎแแแแ, app.py
-แจแ แฃแแแ แแแแแแกแแแก แกแแ แแแ แฃแแ แแแแแแแชแแแก แแแกแแจแแแแแ แกแแญแแ แ แแแแ, แแแแแแแแแแแแ, แแแแคแแแฃแ แแชแแ, แ แแกแฃแ แกแแแแแ แแแ. แแแแแก แกแฎแแ แแแแแ แฉแแแ แแแฌแแแ แฃแแแ แแแแแแแแกแแ แแแขแแแแแฃแ แคแแแแแแจแ แแ แแแแฃแแแแแ แแแ แชแแแขแ แแแฃแ app.py
-แกแแแ. แแแแกแแแแก แแฃแชแแแแแแแแ แแ แแแ แแแ แแแแงแแ แคแฃแแฅแชแแแแแแฃแ แแแ แชแแแแแ แแ แแแแแแแแแแกแแ แจแแกแแแแแแก แคแแแแแแจแ. แแแแแแแแแ: แแแแแแแแ => models.py
; แแแแ แแ viewแแแ => views.py
-แจแ แแ แ.แจ.
แกแขแ แฃแฅแขแฃแ แแแแชแแแก แแ แแชแแกแ แแแแฎแแแ แแแ แแแแแแแแแแแข แแ แแชแแกแแก แแแแคแแ แขแฃแแแ แฌแแแแ แแแแจแ. แแฃแชแแแแแแแแ แแ แแแฅแขแก แแแแฃแแแแแ แแกแแแ แกแขแ แฃแฅแขแฃแ แ, แ แแ แ แแแแ แช แแ แแ แแแแแแแแแ แแก แแกแ แแแแแแแแแ แแ แแฃแแแแกแแแแกแแช แแแ แขแแแ แแฆแกแแฅแแแแ แแ แแแกแแฎแแแแ แ แแงแแก, แกแแ แ แ แแ แแก แแแแแแกแแแฃแแ.
แแแแกแแแแก แแ แแแฅแขแ แฃแแแ แแแแงแแ แจแแแแแแแแแ แซแแ แแแแ แแแแแแแขแแแแ แแ แแ แแแแแแแขแแแแก แกแแแฃแจแแแ แกแแญแแ แ แแแแแแแแแขแแแแ (แ แแแแแแช แแแแแก แแแแจแ แจแแแซแแแแ แแแแชแแแแแก แฅแแแ แแกแฃแ แกแแแก). แจแแกแแแแแแกแแ แแแฆแแแ แฎแแกแแแ แกแขแ แฃแฅแขแฃแ แแก แกแแแแช แงแแแแแคแแ แ แฃแแแแจแแ แแแแ แซแแ แแแแ แกแแ แแแ แฃแ แแแแแแแชแแแก.
แแแแแแแแแกแแแแก แแแแแแฎแแแแ แฌแแแ แแแแแกแแแแก แจแแ แฉแแฃแแ แแ แแแฅแขแ แแ แแแชแแแแ แแแก แกแขแ แฃแฅแขแฃแ แแแแแแก แจแแแแแแแก แแแฎแแแแแ. แแแแแแแแแกแฌแแแแ แ แแ แแก แแ แแ แแก แแแแชแ แแ แแแแกแแแฆแแ แฃแแ แฌแแกแ แแฃ แ แแแแ แ แกแขแ แฃแฅแขแฃแ แ แฃแแแ แฐแฅแแแแแก แแฅแแแแก แแ แแแฅแขแก, แแ แแแแ แฃแคแ แ แจแแแแแแแแแแแ แแฃ แ แแแแ แแแแฌแงแแ แแแขแแแแแฃแ แ แแแ แแแ.
แจแแกแแแแแแกแแ แฌแแแ แแแแจแ แแแแฎแแแฃแแ แกแขแฃแแแแข-แแแกแฌแแแแแแแแก แแ แแแฅแขแแก แกแขแ แฃแฅแขแฃแ แแแแชแแ แแกแแ แจแแกแแซแแแแแแ:
๐ฆStudentPortal
โโโโapp.py # แแแแแแ แ app.py แ แแแแแก แแแแแซแแฎแแแแแแช แแแแจแแแแ web app แกแแ แแแ แ
โโโโrequirements.txt # แแ แแแฅแขแแกแแแแก แกแแญแแ แ แแแแแแแแแแแแแก แกแแ pip install-แ แแแกแแงแแแแแแแ
โโโโ๐migrations # แคแแแแแ แ แจแแฅแแแแแ แแแแ แแชแแแแแกแแแแก
โโโโ๐myproject # แแ แแแฅแขแแก แ แแกแฃแ แกแแแแก แแแแแแ แ แคแแแแแ แแแ, แแแแแแแแแขแแแ แแแแแแแฌแแแแแฃแแแ แกแฃแ-แคแแแแแ แแแจแ
โ โ __init__.py # แแแแแแแชแแแก แแฆแฌแแ แ แแ แแแแคแแแฃแ แแชแแ
โ โ
โ โโโโ๐static # แแแแแแ แกแขแแขแแแฃแ แ แคแแแแแแแกแแแแก: CSS, JS, Images, Fonts, etc...
โ โโโโ๐templates # แแแ แแแแแแแชแแแก แซแแ แแแแแ/แกแแกแขแแ แขแ แจแแแแแแแแ
โ โ โ base.html
โ โ โ home.html
โ โ # แแแแแแแแแขแแแแก แกแแแแแ แ แ แแกแฃแ แกแแแ
โ โ data.sqlite # แแแแแแฃแ แ แแแแ
โ โ models.py # แแแแแก แแแแแแแแ
โ โ # แแแแแแแแแขแแแ
โ โโโโ๐teachers
โ โ โ forms.py
โ โ โ views.py
โ โ โ
โ โ โโโโ๐templates
โ โ โ โโโโ๐teachers
โ โ โ โ add_teachers.html
... ...
... ...
โ โโโโ๐students
โ โ โ forms.py
โ โ โ views.py
โ โ โ
โ โ โโโโ๐templates
โ โ โ โโโโ๐students
โ โ โ โ add.html
โ โ โ โ delete.html
โ โ โ โ list.html
แ แแช แฃแคแ แ แแแ แแแแ แแ แแแฅแขแ แแแ แฃแคแ แ แแแ แแแแ แแแแแแแชแแแก แกแแแฃแจแแ แแแแแก แแแแ. แ แแแแ แฎแแแแแ แแแ แแ แแแแกแ แ แแ แแแแแแฏแแแ แแ แแแแแแแแกแแแ แกแแ แแแ แแก แแแกแแกแขแแ แขแแ แแ แแ แแแฅแขแแก แกแแแฃแจแแแ แกแแญแแ แ แ แแกแฃแ แกแแแ, แแแแแแแแกแแ แแก แ แแกแฃแ แกแแแ แกแแแ แแmyproject
แแแ แแฅแขแแ แแแจแ. แจแแแแแแ แแ แแแ แแฅแขแแ แแแจแ แ แแกแฃแ แกแแแก แแแแฃแแแแแ แชแแแแ แแแขแแแแ แแแแชแแ, แแแแแแแแแ แชแแแแ แแแแแแแแกแแ แจแแแแแแแแ, แชแแแแ แแแแแก แแแแแแแแ แแ แฅแแ แแแ แแฅแขแแ แแแแแ แแแแแขแแแแ แกแแแฃแจแแ แแแแแฅแขแแแ - แแแแแแแแแขแแแ. แแ แแฅแขแแแฃแแแ แแฃ แแ แแแฅแขแก แแกแ แแแแงแแคแ แจแแแแแแแแแ แแแแแแแแแขแแแแ - แแ แแแแแฅแขแแแแ, แ แแแแแก แแแ แจแแแแช แจแแกแแซแแแแแแแ แ แแกแฃแ แกแแแแก แแแฏแแฃแคแแแ แแ แกแขแ แฃแฅแขแฃแ แแแแชแแ.
แฉแแแแ แจแแแแฎแแแแแกแแแแก แแแแฅแแก แแกแแแแกแ แแ แ แแแแแแแแแขแ: students - แแแกแฌแแแแแแแ แแ teachers - แแแกแฌแแแแแแแแแ. แแแ แแแแฉแแแแ แฅแแแแแแแแแแแขแแแ: แคแแ แแแแ แแ แแแฃแแแ แแ แฅแแแ แแกแฃแ แกแแแ - แจแแแแแแแแ.
แแแก แจแแแแแ แ แแช แแแแ แแฃแแแ แแแแแแแฎแแแแ แแฃ แ แแแแ แ แกแขแ แฃแฅแขแฃแ แ แฃแแแ แฐแฅแแแแแก แแ แแแฅแขแก, แแแแแแแแแฌแแแแ แแ แแแแกแแแ แฌแแแ แแแแจแ แแฌแงแแแแแ แแ แแแฅแขแ แจแแกแแแแแแก แกแขแ แฃแฅแขแฃแ แแแ. แแแแกแแแแก แซแแ แแแแแแ แแฎแแแ แแแ แแฅแขแแ แแแแแก แจแแฅแแแ แแ แแแแจแ แฌแแแ แแแแแแแ copy
/ paste
แแแแแแขแแแแแ แคแแแแแแแก แแแขแแแแแแชแแ แแแแแญแแ แแแแ. (แ แแแแแ แแแแแก แซแแ แแแแแ แแแฌแแแ แฃแแแ แแแแฌแแ แแ แฌแแแ แแแแจแ)
แแ แแชแแกแแก แแแแแ แขแแแแแแจแ แแแแแแฎแแแ แแแ flask-แจแ แฉแแจแแแแแฃแแ blueprints แจแแกแแซแแแแแแแแแ, แ แแแแแแแช แแแแฌแแ แ แแแแฃแแแ แแแแแแแแขแแแก, แแแแแแแแแ แแแแแแแแจแแ แแแ แแแ แจแแกแแแแแแก แแแฃแแแแแ.
แแแแแแแแแกแแแแก, แฉแแแ แแแแฅแแแแ แแ แ views.py
แคแแแแ, แแ แแ แแแกแฌแแแแแแแแแแก แแแแแแแแแขแแกแแแแก แฎแแแ แแแแ แ แกแขแฃแแแแขแแแแก. แแแแแแฃแ แแ แคแแแแก แแฅแแแแ แแแแแกแ add view. แแแแกแแแแก แ แแ แแแแแฎแแแ แแ flaskแก แแแแแกแฎแแแแแก /add แแแ แจแฃแขแแแ, แฉแแแ แแแแแแแงแแแแแ แแแฃแแ แแแขแก.
แแแฃแแ แแแขแแก แแแจแแแแแแ แแแแฌแแ แ แแแกแแแแ แแแก แแ แแคแแฅแกแแแก แแแแแแฃแแ view แคแแแแแกแแแแก. แแแแแแแแแ:
/students/add
แแ /teachers/add
แจแแกแแแแแแกแแ แแฆแแแแแแแแ แฉแแแแ แกแแแฃแจแแแ:
- แแ แกแแแฃแแ แแแแแก แ แแกแขแ แฃแฅแขแฃแ แแแแชแแ แแ แจแแกแแแแแแก แคแแแแแ แแแจแ แแแแแแแแแแ
- แแ แแแฅแขแแก แแฎแแแ แกแขแ แฃแฅแขแฃแ แแก แจแแกแแแแแแกแแ แแแแแก แแแแแ แแแ
- แแ แแแฅแขแจแ แแแฃแแ แแแขแแก แฉแแแแขแแแ
- แแแฃแแ แแแขแแก แแแฌแแ แ
__init__.py
แคแแแแจแ.
แจแแแแแแแก แแแฎแแแแแ แจแแแฅแแแแ แคแแแแแ แแแ แแ แคแแแแแแ. แจแแแแแ แฅแแ-แแแแจแ แแแแฎแแแ แ แแแแ แฃแแแ แแแแแแ แแแ แแแแ แแ แกแขแ แฃแฅแขแฃแ แแก แแแฎแแแแแ:
แแแแแแแแฃแแแฃแ แแ แแแแแแแแ แแแ แแแแแฃแแ แคแแแแแก แจแแแแแแก แแแแก แแฅแแแ แแ แแแแ แแแ แแแแแแ แแฅแแแแก แแ แแแฅแขแก.
from myproject import app
from flask import render_template
@app.route('/')
def index():
return render_template('home.html')
if __name__ == '__main__':
app.run(debug=True)
แ แแแแแแแช แกแฃแ แแ แ แแแแแแ แแแแฅแแก แแ แแแฅแขแจแ, แแแแแแฌแงแแแขแ แแแแ แแ แ แคแแแแจแ แแแขแแแแแ, แ แแแแแ แแแแแก แแแแแแขแแ แแแแแฌแแแ แแแแช แแ แแ แแก แกแแญแแ แ. แแฃแแชแ แแฃ แแฅแแแแ แแแแแแแแแก แแแแ แแ แแแแจแ แจแแแแแแแ แแแแแแแแ แแแแแ แ แ แกแแแแแ แแแแแ แกแแกแฃแ แแแแแ แแแแ แกแขแ แฃแฅแขแฃแ แแแแชแแแช. แฉแแแก แจแแแแฎแแแแแจแ แคแแแแ แแกแ แแแแแแงแฃแ แแแ:
from myproject import db
class Student(db.Model):
__tablename__ = "students"
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String)
# One_to_one relationship
# A student only has one teacher, thus uselist is False.
# Strong assumption of 1 teacher per 1 student and vice versa.
teacher = db.relationship('Teacher', backref="student", uselist=False)
def __init__(self, name):
# แแฎแแแแ แแแญแแ แแแแ แแ แแแแแก แแแแแแแกแแแแก แฃแแแแแแฃแ แ แฌแแแ แแก แแขแ แแแฃแขแแก แแฆแฌแแ แ
self.name = name
def __repr__(self):
if self.teacher:
return f"Teacher of the Student {self.name} is {self.teacher.name}"
else:
return f"Student {self.name} has no teacher yet"
class Teacher(db.Model):
id = db.Column(db.Integer, primary_key=True)
# Connect the teacher to the Student that "owns" it.
# We use student.id because __tablename__='student'
student_id = db.Column(db.Integer, db.ForeignKey('students.id'))
name = db.Column(db.String)
def __init__(self, name, student_id):
self.name = name
self.student_id = student_id
def __repr__(self):
return f"Teacher Name: {self.name}"
แแ แแแแแ แแ แแแแกแฎแแแแแแ แ แแช แซแแแแ แแแแแกแแแ แแแแฅแแก แแ แแก from myproject import db
. แแก แแแแขแแ แ แแ แฉแแแ แกแแ แแแ แฃแแ แแ แแแ แแแแก แแฆแฌแแ แแก (แจแแกแแแแแแกแแ แคแแแกแแแก แแแแคแแแฃแ แแชแแแก แแ แแแแแชแแแแ แแแกแแแแช) แแแแแแแขแแแ myproject/__init__.py
-แคแแแแจแ.
import os
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
app = Flask(__name__)
# แแฃ แแแแคแแแฃแ แแชแแแกแแแแแก แแงแแแแแ แแแแ แแแ แแแแขแ แก แกแแกแฃแ แแแแแ แแแแ config.py แคแแแแจแ แแแแแแแฌแแแแแ
app.config['SECRET_KEY'] = 'mysecretkey'
basedir = os.path.abspath(os.path.dirname(__file__))
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(basedir, 'data.sqlite')
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
Migrate(app,db)
# แแแแแแแแแกแฌแแแ! แแฃแชแแแแแแแแ แแแแแ แขแแแแก แแแแแแแแ แแแก แจแแแแแ แ แแช db แแแแแฅแขแก แแแฌแแ
# แฌแแแแแฆแแแแ แจแแแแฎแแแแแจแ models.py แแแแแแแ แแ แแแแ.
## แแแแแกแแแ แแแแฃแจแแแ views.py แคแแแแแแ แกแแแแแแแ แจแแแแแแขแแแแ แแแแ แแแฃแแ แแแขแแแแ
from myproject.students.views import students_blueprint
from myproject.teachers.views import teachers_blueprint
# แแแแก แจแแแแแแ แฃแแแ แจแแแแแซแแแ แแแฃแแ แแแขแแแแก แ แแแแกแขแ แแ แแแ
app.register_blueprint(students_blueprint,url_prefix="/students")
app.register_blueprint(teachers_blueprint,url_prefix='/teachers')
แแแฃแแ แแแขแแแแ แแ แแแแแแแแแ แแ แแขแแแแ. แ แแแแกแแช แแแฃแแแก แแแแฌแแ แ แแฅ แแแกแแฃแแ แแแ แแฃ แ แแก แแแแแแแแ แแ แแขแแแแกแแแแก แฃแฎแแแแ แแแฌแแแจแ.
แแ แกแแคแแฎแฃแ แแกแแแแก แแ แแแแฎแกแแแแ แ แแแแ แแแแแขแแแแ api-แก แฌแแแแกแฌแแ แแแฌแแ แแ แแแแแฅแขแก. แแฅแแช แแกแแแแกแ แกแขแ แฃแฅแขแฃแ แ แแแแฅแแก. แแ แแแฅแขแจแ แจแแแแแแแฅแแก แแแฃแแแ แ แแแแแแช แแแแแแกแแแฃแแ แจแแกแแแแแแกแ แแแฃแก แแแฃแแ แแแขแจแ (แแแ. students_blueprint
) แแ register_blueprint()
แแแแแแแก แแแแแงแแแแแแ, แฉแแแแก แแแแแแแชแแแจแ แแแ แแแแกแขแ แแ แแแ แแแฃ แ แแกแฃแ แกแก แจแแกแแแแแแก แแแกแแแแ แแแ.
แแ แ แแแแ แช API-แก แจแแแแฎแแแแแจแ, แแแแแกแแแแ แ แคแฃแแฅแชแแแแแแ แ แแแแแแช แ แแกแฃแ แกแจแ แแงแ แแแฌแแ แแแ แแแขแแแแขแฃแ แแ แแฅแขแแฃแ แแแแแแ แจแแกแแแแแแก แแแกแแแแ แแกแ แแฃ แแแแแแแก แขแแแแ, แแแแแแแแฃแ แแ แแแแฅแขแแฃแ แแแแ แแแฃแจแ แแแฌแแ แแแ แคแฃแแฅแชแแแแแแแแ, แแแฃแแ แแแขแแก แแแฎแแแแแ.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>แกแขแฃแแแแขแแก แแแ แขแแแ</title>
<!-- CSS only -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" integrity="sha384-JcKb8q3iqJ61gNV9KGb8thSsNjpSL0n8PARn9HuZOnIxN0hoP+VmmDGMN5t9UJ0Z" crossorigin="anonymous">
<!-- JS, Popper.js, and jQuery -->
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/umd/popper.min.js" integrity="sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js" integrity="sha384-B4gt1jrGC7Jh4AgTPSdUtOBvfO8shuf57BaghqFfPlYxofvL8/KUEfYiJOMMV+rV" crossorigin="anonymous"></script>
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<div class="navbar-nav">
<a class="nav-item nav-link" href="{{ url_for('home') }}">แแแแคแฃแ แชแแแ</a>
<a class="nav-item nav-link" href="{{ url_for('student.add') }}">แกแขแฃแแแแขแแก แแแแแขแแแ</a>
<a class="nav-item nav-link" href="{{ url_for('student.list') }}">แกแขแฃแแแแขแแก แกแแ</a>
<a class="nav-item nav-link" href="{{ url_for('student.delete') }}">แกแขแฃแแแแขแแก แฌแแจแแ</a>
<a class="nav-item nav-link" href="{{ url_for('teacher.add') }}">แแแกแฌแแแแแแแแก แแแแแขแแแ</a>
</div>
</nav>
{% block content %}
{% endblock %}
</body>
</html>
{% extends "base.html" %}
{% block content %}
<div class="jumbotron">
<h1>แแแแแกแแแแแแแ แกแขแฃแแแแขแแก แแแแขแคแแ แแแแ</h1>
<p>แแแฎแแแ แแแ แฉแแแ แจแแกแแแแแแกแ แคแฃแแฅแชแแแแแแ แกแแแแแแแแชแแ แแแแแแแ</p>
</div>
{% endblock %}
แ แแแแ แช แฎแแแแแ home.html แฌแแแ แแแแแก แแแแแขแฃแ แแ. แแฅ แจแแแแซแแแแ แแแแแกแแแแ แ แแแแขแแแขแ แแแแแแแกแแ แ แแกแ แแแแแฉแแแแช แแแแคแฃแ แชแแแแ แแกแฃแ แ.
แแ แแแ แแแแแแแแแขแแก แคแแ แแแแแก แคแแแแก แแ แ แฅแแแแแแจแ แแแแแแ แแแแแแ แ แแ แแ แแแกแขแ แฃแฅแชแแแก แแแงแแแ แแแแแแแ แขแแแแแ. แแ แแขแแแแกแแแแก แจแแแแแแแก แแแฎแแแแแ แฃแแแ แแฅแแแแแ แจแแฅแแแแแ แแแแแแฃแแ แแแแแแแแแขแแก แแแ แแฅแขแแ แแ แจแแกแแแแแแกแ forms.py
แคแแแแแแแ:
from flask_wtf import FlaskForm
from wtforms import StringField, IntegerField, SubmitField
class AddForm(FlaskForm):
name = StringField('แกแขแฃแแแแขแแก แกแแฎแแแ:')
submit = SubmitField('แกแขแฃแแแแขแแก แแแแแขแแแ')
class DelForm(FlaskForm):
id = IntegerField('แกแขแฃแแแแขแแก แฃแแแแแแฃแ แ แแแแแขแแคแแแแขแแ แ:')
submit = SubmitField('แกแขแฃแแแแขแแก แฌแแจแแ')
from flask_wtf import FlaskForm
from wtforms import StringField, IntegerField, SubmitField
class AddForm(FlaskForm):
name = StringField('แแแกแฌแแแแแแแแก แกแแฎแแแ:')
student_id = IntegerField("แกแขแฃแแแแขแแก แแแแแขแแคแแแแขแแ แ: ")
submit = SubmitField('แแแกแฌแแแแแแแแก แแแแแขแแแ')
แแแแแแแฅแแ แแแแแก แงแแแแแแ แกแแแแขแแ แแกแ แแแฌแแแก, view แคแแแแแแก. แกแฌแแ แแ แแ แคแแแแแแจแ แแแแแแแขแแแ แแแฃแแ แแแขแแแก. แแก แกแแแฃแจแแ แจแแแแแ แกแแคแแฎแฃแ แแแแ แจแแแแแซแแแ แฉแแแจแแแแ:
- แแแแฌแงแแ view แคแแแแ แ แแแแแแช แจแแแแแแแก แแ แคแฃแแฅแชแแแแแแแก แแแแแแจแแ แแแแแแ แแแกแฃแฎแแกแแแแแแแ
- แฉแแแแแแขแแ Blueprints-แแแ
- แแแแแ แแแแกแขแ แแ แแ Blueprint-แแแ
- แแแแฃแแแแจแแ แแ
app.py
-แก - แฉแแแแแแขแแ แแแกแแแแ แแแแ
base.html
-แแก navbar-แจแ
แแ แแชแแกแ แฃแแแ แแแแแฌแงแแ แแแฃแแ แแแขแแก แแ แกแฎแแ แกแแญแแ แ แ แแกแฃแ แกแแแแก แจแแแแขแแแแ:
# แคแแแกแ แแแแแแแชแแแก แฎแแแกแแฌแงแแแแแก แจแแแแขแแแ
from flask import Blueprint, render_template, redirect, url_for
# แจแแแแแแจแ แแแแแกแแแ แกแแแฃแจแแ แคแฃแแฅแชแแแแแแแก แฉแแกแแจแแแแแแแ
from myproject import db
# แแกแแแ แแแแแญแแ แแแแ แแแแแแ, แ แแแแแก แแแฎแแแแแแแช แแแฌแงแแแ แแ แคแฃแแฅแชแแแแแแก
from myproject.models import <ModelName>
# แแ แกแแแแแแแ แคแแ แแแแ แ แแแแแแช แแแแแแ แแแ แแแแ แแจแ แแแแแแแงแแแแ
from myproject.<component>.forms import <FormFields>
แแแแก แจแแแแแแ แแแแแญแแ แแแแ แแแแแแแแแขแแก Blueprints แแแแแฅแขแแก แจแแฅแแแ:
component_blueprint = Blueprint('<component_name>', __name__, template_folder='templates/<component_name>')
แกแแแแแแแ แ แฉแแแ แคแฃแแฅแชแแแแแแแก แแแกแแแแ แแแ แแแแแแ แแแ.
routing-แจแ แแแแกแฎแแแแแแ แแกแแ แ แแ app แแก แแแแแแ แแ แแฎแแ แแแกแแแแ แแก แฉแแแแก component_blueprint แแแแแฅแขแแ แแแแแขแแแ. แจแแกแแแแแแกแแ แแแ แจแฃแขแแก แกแขแ แฃแฅแขแฃแ แ แแกแแแ แแฅแแแแ:
@component_blueprint.route('/add', methods=['GET', 'POST'])
แกแฌแแ แแ แแ แแแแแฅแขแแแก แแแแแแแแแแ app.py-แกแแแ แแแแแ แแแแแกแ แ แแกแฃแ แกแแ/แแแแแแแแแ. แจแแกแแแแแแกแแ แแแแแฆแแแ แแ แคแแแแก:
from flask import Blueprint,render_template,redirect,url_for
from myproject import db
from myproject.students.forms import AddForm,DelForm
from myproject.models import Student
students_blueprint = Blueprint('students',
__name__,
template_folder='templates/students')
@students_blueprint.route('/add', methods=['GET', 'POST'])
def add():
form = AddForm()
if form.validate_on_submit():
name = form.name.data
# Add new Student to database
new_student = Student(name)
db.session.add(new_student)
db.session.commit()
return redirect(url_for('students.list'))
return render_template('add.html',form=form)
@students_blueprint.route('/list')
def list():
# Grab a list of students from database.
students = Student.query.all()
return render_template('list.html', students=students)
@students_blueprint.route('/delete', methods=['GET', 'POST'])
def delete():
form = DelForm()
if form.validate_on_submit():
id = form.id.data
student = Student.query.get(id)
db.session.delete(student)
db.session.commit()
return redirect(url_for('students.list'))
return render_template('delete.html',form=form)
from flask import Blueprint,render_template,redirect,url_for
from myproject import db
from myproject.models import Teacher
from myproject.teachers.forms import AddForm
teachers_blueprint = Blueprint('teachers',
__name__,
template_folder='templates/teachers')
@teachers_blueprint.route('/add', methods=['GET', 'POST'])
def add():
form = AddForm()
if form.validate_on_submit():
name = form.name.data
student_id = form.student_id.data
# Add new teacher to database
new_teacher = Teacher(name,student_id)
db.session.add(new_teacher)
db.session.commit()
return redirect(url_for('students.list'))
return render_template('add_teachers.html',form=form)
แจแแแแแแแแจแ แจแแแแแซแแแ แแแแแแแแกแแ แแแแแกแแแแ แ แแก html แจแแแแแแ แ แแแแแแช แแ แแแแแแแแแขแแแ แกแแแฃแจแแ แแแแแญแแ แแแแ. แฌแแแ แแแแแแแแแแแ แแแแแแแแขแแแแ แกแขแฃแแแแข แแแแแแแแแขแแแ แกแแแฃแจแแ แจแแแแแแแแ.
{% extends "base.html" %}
{% block content %}
<div class="jumbotron">
<h1>แกแขแฃแแแแขแแก แแแแแขแแแ</h1>
<p>แกแขแฃแแแแขแแก แแแแแขแแแ แฎแแแแ แจแแแแแแ แคแแ แแแแแ:</p>
<form method="POST">
{{ form.hidden_tag() }}
{{ form.name.label }} {{ form.name() }}
{{ form.submit() }}
</form>
</div>
{% endblock %}
{% extends "base.html" %}
{% block content %}
<div class="jumbotron">
<h1>แแกแฃแ แ แกแขแฃแแแแขแแก แฌแแจแแ?</h1>
<p>แจแแแแกแแ แคแแ แแ แกแขแฃแแแแขแแก แแแแแขแแคแแแแขแแ แแ</p>
<form method="POST">
{# This hidden_tag is a CSRF security feature. #}
{{ form.hidden_tag() }}
{{ form.id.label }} {{ form.id() }}
{{ form.submit() }}
</form>
</div>
{% endblock %}
{% extends "base.html" %}
{% block content %}
<div class="jumbotron">
<h1>แแฎแแแแ แแแแแจแ แแแ แแแแกแขแ แแ แแแฃแ แกแขแฃแแแแขแแ แกแแ</h1>
<ol>
{% for student in students %}
<ul>{{ student.id }} {{ student }}</ul>
{% endfor %}
</ol>
</div>
{% endblock %}
{% extends "base.html" %}
{% block content %}
<div class="jumbotron">
<h1>แแแกแฌแแแแแแแแก แแแแแขแแแ</h1>
<p>แแแกแฌแแแแแก แแแแแขแแแ แจแแแแซแแแแ แคแแ แแแแแ:</p>
<form method="POST">
{# This hidden_tag is a CSRF security feature. #}
{{ form.hidden_tag() }}
{{ form.name.label }} {{ form.name() }}<br>
{{ form.student_id.label }} {{ form.student_id() }}<br>
{{ form.submit() }}
</form>
</div>
{% endblock %}