zoukankan      html  css  js  c++  java
  • 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/进行测试,如果能正常显示班级列表页,班级学生列表页,全部学生列表页,则为成功

     

  • 相关阅读:
    vue2 下载scss依赖包
    fastjson使用
    vscode format
    flutter 中涉的深拷贝
    通过pom给maven添加编译插件
    IDEA添加动态模板(Live Templates)
    Maven启动tomcat:run异常
    Redis
    tomcat启动时启动窗口出现乱码的解决方案
    无效的源发行版,解决方案
  • 原文地址:https://www.cnblogs.com/hhy-love-python/p/8600580.html
Copyright © 2011-2022 走看看