flask模块划分
1、manage.py#用于啟動main.py
from student.views import app#用于運行視圖 from student.models import models if __name__=='__main__':models.create.all()app.run()app.run(host="0.0.0.0",post=8000,debug=True)2.main.py主模塊
import pymysql from flask import Flask import os from flask_sqlalchemy import SQLAlchemy app=Flask(__name__)#name當前文件 app.config.from_object("config.DebugConfig") #用于調(diào)用config中的DebugConfig類 models=SQLAlchemy(app)3、config.py
import os BASE_DIR=os.path.abspath(os.path.dirname(__file__))#路徑 class BaseConfig(object): #object是python中所有類的父類,默認可以不寫 #URI統(tǒng)一資源匹配符;配置數(shù)據(jù)連接的參數(shù) #app.config返回類字典對象,里面用來存放當前app的配置。 SQLALCHEMY_COMMIT_ON_TEARDOWN=True#請求結(jié)束后自動提交數(shù)據(jù)庫修改 SQLALCHEMY_TRACK_MODIFICATIONS=True class DebugConfig(BaseConfig):DEBUG=TrueSQLALCHEMY_DATABASE_URL="sqlite:///"+os.path.join(BASE_DIR,"demo.splite") class OnlineConfig(BaseConfig):DEBUG=FlaseSQLALCHEMY_DATABASE_URL="sqlite:///"+os.path.join(BASE_DIR,"demo.splite")4、models.py#模型模塊
from student.main import models session=models.session() class BaseModel(models.Model):#學員表__abstract__=True#抽象表為True,代表當前類為抽象類,不會被實例化id=models.Column(models.Integer,primary_key=True,autoincrement=True)def save(self):session.add(self)session.commit()def delete_obj(self):session.delete(self)session.commit() class Student(BaseModel):#學員表__tablename="students"name=models.Column(models.String(32))age=models.Column(models.Integer)gender=models.Column(models.Integer)#0,男;1女;2其他 Stu_Cou=models.Table(#中間關(guān)系表#多對多"stu_cou",models.Column("id",models.Integer,primary_key=True,autoincrement=True),models.Column("course_id",models.Integer, models.ForeignKey("course.id")),models.Column("students_id",models.Integer, models.ForeignKey("students.id"))) #flask-sqlalchemy數(shù)據(jù)庫多對多映射表不可以是class類定義表,只能是Table設(shè)置的虛表 class Course(BaseModel):#課程表__tablename="course"label=models.Column(models.String(32))description=models.Column(models.Text)to_teachers=models.relationship(#relationship關(guān)聯(lián)關(guān)系'Teachers',#映射類的名稱和類名一致backref="to_course")to_student=models.relationship("Students",secondary=Stu_Cou,多對多關(guān)系表backref=models.backref("to_course",lazy="dynamic")lazy="dynamic")#models.relationship當前字段用于一對多或者多對多反向映射#第一個參數(shù)是映射向的模型名稱#secondary參數(shù),指向多對多的關(guān)系表#backref參數(shù)指向反向映射字段,反向映射表通過該字段查詢當前表內(nèi)容#models.relationship當前字段用于一對多或者多對多反向映射#lazy #select訪問該字段時候,加載所有的映射數(shù)據(jù)#joined 對關(guān)聯(lián)的兩個表students和stu_cou進行join查詢#dynamic 不加載數(shù)據(jù)class Grade(BaseModel):#成績表,課程、學員關(guān)聯(lián)此表__tablename = "grade"grade=models.Column(models.Float)course_id=models.Column(models.Integer,models.ForeignKey("course.id"))student_id = models.Column(models.Integer, models.ForeignKey("students.id")) class Attendance(BaseModel):#考勤表 關(guān)聯(lián)學員__tablename = "attendance"student_id = models.Column(models.Integer, models.ForeignKey("students.id"))att_time=models.Column(models.Date)status = models.Column(models.Integer,default=1)#0遲到;1正常出勤;2早退;3請假;4曠課 class Teachers(BaseModel):#教師表__tablename = "teachers"name = models.Column(models.String(32))age = models.Column(models.Integer)gender = models.Column(models.Integer) # 0,男;1女;2其他course_id = models.Column(models.Integer, models.ForeignKey("course.id")) class User(BaseModel):__tablename="user"username=models.Column(models.String(32))password=models.Column(models.String(32))identity=models.Column(models.Integer)#0學員;1老師identity_id=models.Column(models.Integer,nullable=True)5、views.py
from flask imort render_template,redirect from student.main import app from student.models import Student,Course,Teachers,User from flask import request,session from flask_session import Session import hashlib @app.route('/student/") def student():print("函數(shù)調(diào)用成功")student_list = Students.query.all()return render_template("student.html", **locals())return render_template("student.html", student_list=student_list)@app.route('/add/') def add():course = Course()course.label = "python"course.description = "python是最好的語言"course.save()teacher = Teachers()teacher.name = "lys"teacher.age = "18"teacher.gender = 0teacher.course_id = 1teacher.save() @app.route('/register/', methods=["GET", "POST"]) def register(): # 已經(jīng)導(dǎo)入request包不用再在參數(shù)里添加if request.method == "POST":form_data = request.formusername = form_data.get("username")password = form_data.get("password")identity = form_data.get("identity")user = User()user.username = usernameuser.password = passworduser.identity = identityuser.save()return redirect('/login/')return render_template('register.html', **locals()) @app.route('/login/', methods=["GET", "POST"]) def login():if request.method == "POST":form_data = request.formusername = form_data.get("username")password = form_data.get("password")user = User.query.filter_by(username=username).first()if spw(password)==user.password:response = redirect('/index/')response.set_cookie("username",username)return responsereturn render_template('login.html', **locals()) def spw(password):md5=hashlib.md5()md5.update(password.encode())return md5.hexdigest()#返回加密的密碼 @app.route('/index/', methods=["GET", "POST"]) def index():return render_template('index.html', **locals())總結(jié)
- 上一篇: flask双向映射语法
- 下一篇: TypeError: Expected