zoukankan      html  css  js  c++  java
  • Flask

    1.Flask:

    Flask是python的web框架,最大的特征是轻便,让开发者自由灵活的兼容要开发的feature。

    为什么要从Flask开始学习web框架?
    1.python语言的灵活性给予了Flask同样的特征;
    2.无论是用户画像还是产品推荐,python相比其他语言都有极大的优势;
    3.Flask轻便,容易上手,试错成本低

    Flask上手前提少,能够极大帮助初学者快速理解web开发.
    (1)面向对象编程(Object-Oriented Programming, OOP)
    相信绝大多数人都接触过OOP,比如使用Java, Python, Go等。在Flask中,涉及基础OOP的概念,包括对象、类、继承、封装等。
    (2)python基础
    Flask中涉及简单python概念,包括模块、包、装饰器、模块等。
    (3)命令行基础
    大部分的开发都绕不开命令行,Flask同样要求基础命令行操作,例如上传服务器、查询文件、修改配置文件等。
    (4)数据库基础
    web开发会产生数据管理的问题,虽然可以使用非数据库的方式搭建静态网页,但从长远来看将,掌握一门基础的数据库工具是很有必要的。比如结构化数据库Mysql, Postgresql,非结构化的MongoDB, Redis等。
    (5)前端基础
    虽然搭建网站主要是后台逻辑编写,但今天越来越多的人在意前台展现,因此Flask除了后台python语言的要求外,还要求掌握基础的html, JavaScript, CSS。
    (6)版本控制(增强)
    版本控制是所有程序开发的基础,了解基础的版本控制可以大大提高开发的效率。掌握基础的git技能会提高Flask网站开发速度。
     
    2.创建Flask项目
    准备
    mkvirtualenv flask_demo -p python3

    安装

    pip install flask==0.12.4
    # 导入flask程序
    from flask import Flask
    
    # 初始化flask对象
    app = Flask(__name__)
    # 装饰器模式,新建路由,绑定index视图函数
    @app.route("/index")
    def index():
        return "index page"
    
    # 判断当前的__name__ 是否是__main__
    # __name__ : 如果做为单一模块运行,表示主模块名称:__main__
    #            如果做为模块导入,那么就表示当前模块的名字
    if __name__ == '__main__':
        # 启动app
        app.run()

    运行之后,在浏览器地址栏输入:http://127.0.0.1:5000/index

    就可以看到视图函数返回的内容

    Flask数据库基本操作

    • 在Flask-SQLAlchemy中,插入、修改、删除操作,均由数据库会话管理。

      • 会话用 db.session 表示。在准备把数据写入数据库前,要先将数据添加到会话中然后调用 commit() 方法提交会话。
    • 在 Flask-SQLAlchemy 中,查询操作是通过 query 对象操作数据。

      • 最基本的查询是返回表中所有数据,可以通过过滤器进行更精确的数据库查询。

    在视图函数中定义模型类

    from flask import Flask
    from flask_sqlalchemy import SQLAlchemy
    
    
    app = Flask(__name__)
    
    #设置连接数据库的URL
    app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:mysql@127.0.0.1:3306/test'
    
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
    #查询时会显示原始SQL语句
    app.config['SQLALCHEMY_ECHO'] = True
    db = SQLAlchemy(app)
    
    class Role(db.Model):
        # 定义表名
        __tablename__ = 'roles'
        # 定义列对象
        id = db.Column(db.Integer, primary_key=True)
        name = db.Column(db.String(64), unique=True)
        us = db.relationship('User', backref='role')
    
        #repr()方法显示一个可读字符串
        def __repr__(self):
            return 'Role:%s'% self.name
    
    class User(db.Model):
        __tablename__ = 'users'
        id = db.Column(db.Integer, primary_key=True)
        name = db.Column(db.String(64), unique=True, index=True)
        email = db.Column(db.String(64),unique=True)
        password = db.Column(db.String(64))
        role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))
    
        def __repr__(self):
            return 'User:%s'%self.name
    if __name__ == '__main__':
        app.run(debug=True)
    View Code

    模型之前的关联

    一对多

    在一的那一方,建立跟多的那一方的关联属性

    class Role(db.Model):
        ...
        #关键代码
        us = db.relationship('User', backref='role', lazy='dynamic')
        ...
    
    class User(db.Model):
        ...
        role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))
    View Code

    多对多

    多对多是通过建立中间表实现的。中间表值记录关系和存储关系字段。

    这个中间表将互为多对多的关系表的主键设为外键。

    这个关系表是直接建立的,不适用于模型类映射

    registrations = db.Table('registrations',  
        db.Column('student_id', db.Integer, db.ForeignKey('students.id')),  
        db.Column('course_id', db.Integer, db.ForeignKey('courses.id'))  
    )  
    class Course(db.Model):
        ...
    class Student(db.Model):
        ...
        classes = db.relationship('Course',secondary=registrations,  
                                        backref='student',  
                                        lazy='dynamic')
    View Code

    增删改查

    user = User(name = "lisi")
    db.session.add(user)    # 将user添加到这个TCP会话当中,这个session就代表这个链接会话

    user = User.query.get(1)
    db.session.delete(user)
    db.session.commit()

    user = User.query.get(1)
    user.name = "lisi"
    db.session.commit()

    语法:
    
    模型类名.query.过滤器.查询执⾏行行器器






  • 相关阅读:
    Springboot中mybatis控制台打印sql语句
    CTF资源
    Python渗透测试工具合集
    哪些方法可以绕过PowerShell Execution Policy?
    路由器漏洞挖掘使用的脚本
    路由器漏洞挖掘(栈,危险函数,方法)
    路由器漏洞挖掘环境搭建
    MIPS 汇编指令学习
    Linux下安装Sublime Text 3 及使用快捷方式
    Ubuntu 16.04 安装Python 3.6
  • 原文地址:https://www.cnblogs.com/tyl23/p/11809112.html
Copyright © 2011-2022 走看看