flask学习

flask程序基本架构

#引入flask基础模块
from flask import Flask
​
#创建项目实例
app = Flask(__name__)
​
#路由
@app.route('/')
#视图
def hello_world():
    return 'Hello World!'
​
​
if __name__ == '__main__':
    #启动实例
    '''
    都是布尔值
    debug:是否开启调试模式,代码更新可以自动重启服务,默认为FALSE,但flask的前端代码修改是不会自动更新的,需要手动重启
    threaded:是否开启多线程
    port:服务器监听端口,默认为5000,但8000之内基本被系统调用,最好选8000之外的
    host:指定主机,默认为127.0.0.1,可以设置为0.0.0.0,使可以通过ip访问
    
    '''
    app.run(debug=True,threaded=True,host='0.0.0.0',port='9999')


模型设计

手动创建数据库

create database hu charset=utf8;

配置数据库

配置mysql

1.安装flask-mysqldb:用于和mysql进行交互

pip install PyMySQL

2.安装flask-SQLAlchemy:用于ORM转换

pip install Flask-SQLAlchemy

3.在manage.py文件中引入SQLAlchem类


from flask_sqlalchemy import SQLAlchemy

4.在manage.py下面配置数据库


#配置数据库
#配置数据库的链接URL
app.config['SQLALCHEMY_DATABASE_URI']='mysql+pymysql://root:root@127.0.0.1/hu'
#禁止对象的修改追踪,会降低访问数据库效率
app.config['SQLALCHEMY_TRACK_MODIFICATIONS']=False
#创建数据库对象
db=SQLAlchemy(app)

5.定义模型

#定义模型
#班级
class Grade(model.Model):
    #由model.Column()确定该属性为一个字段,字段类型由参数来区分,django自动为模型设置主键,但flask需要自己设置
    id=model.Column(model.Integer,primary_key=True)
    #django的参数是不能传参的,falsk可以
    gname=model.Column(model.String(32),unique=True)
    ggirlnum=model.Column(model.Integer)
    gboynum=model.Column(model.Integer)
    isDelete=model.Column(model.Boolean,default=False)
    def __init__(self,name,ggirnum,gboynum):
        self.gname=name
        self.ggirlnum=ggirnum
        self.gboynum=gboynum
​
#学生
class Student(model.Model):
    id=model.Column(model.Integer,primary_key=True)
    sname=model.Column(model.String(32))
    sgender=model.Column(model.Boolean)
    sage=model.Column(model.Integer)
    scontend=model.Column(model.String(64))
    #外键的定义,指向外键的id
    sgrade=model.Column(model.Integer,model.ForeignKey('grade.id'))
    isDelete=model.Column(model.Boolean,default=False)
    def __init__(self,name,gender,age,contend,grade):
        self.sname=name
        self.sgender=gender
        self.sage=age
        self.scontend=contend
        self.sgrade=grade
   '''
在django中是没有__init__(),需要通过类方法来创建对象
@classmethod
def createstudent(cls, name,gender,age,contend,grade):
    u = cls(sname=name, sgender=gender, sage=age, scontend=contend, sgrade=grade)
    return u
'''

5.建表


if __name__ == '__main__':
    #建表
    model.create_all()

编写视图(展示班级和学生数据

1.定义模板

①.在manage.py中引入模板函数

from flask import render_temnplate

②.在templates目录下创建grade.html,gradeStudents.html,students.html文件分别对应班级列表页,班级学生列表页,全部学生列表页

2.编写函数,绑定路由


@app.route('/grades/')
def gradeList():
    #获取班级数据
    glist=Grade.query.all()
    # print(glist)
    return render_template('grades.html',glist=glist)
​
​
@app.route('/grade/<gid>/')
def gradeStudents(gid):
    slist=Student.query.filter(Student.sgrade==gid)
    # print(slist)
# return '某个班级的学生列表'
    return render_template('gradeStudents.html',slist=slist)
@app.route('/students/')
def student():
    slist=Student.query.all()
    print(slist)
    return  render_template('students.html',slist=slist)

测试

运行manage.py文件

打开浏览器,输入http://127.0.0.1:8000/grades/,http://127.0.0.1:8000/grade/2/,http://127.0.0.1:8000/students/进行测试,如果能正常显示班级列表页,班级学生列表页,全部学生列表页,则为成功

 

原文地址:https://www.cnblogs.com/hhy-love-python/p/8600580.html