Python_Flask 基础2

2018-10-09  本文已影响1人  Fizz翊

1模版语法

1.1 模版语法主要分为两种: 变量和标签

模版中的变量 : {{ var }}

模版中的标签:{% tag %}

1.2结构标签

Block 挖坑

{% block xxx %}

{% endblock %}

extends 继承

{% extends 'xxx.html' %}

继承后保留块中的内容
{{ super() }}

macro 宏(函数)

{% macro hello(name) %}
    {{ name }}
{% endmacro %}
宏定义 可以在模版中定义函数,在其他地方调用

导入宏

{% from 'xxx.html' import xxx %}

1.3循环

{% for item in cols %}
    aa
{% else %}
    bb
{% endfor %}

也可以获取循环消息的loop

loop.first
loop.last
loop.index 当前迭代的次数 从1开始
loop.revindex 到循环结束需要迭代的次数 从1开始

1.4过滤器

语法:

{{ 变量|过滤器|过滤器 }}

capitalize 首字母大写

lower 小写

upper 大写

safe 将样式渲染到页面中

2. 静态文件信息配置

第一种方式:

<link  rel="stylesheet" href="/static/css/main.css">

第二种方式:

<link rel="stylesheet" href = "{{ url_for('static',filename='css/main.css') }}">

3.数据库的链接

3.1 安装

pip install flask-sqlalchemy
pip install pymysql

3.2定义模型

使用SQLALchemy的对象去创建字段

_tablename_ 指定创建的数据库的名称

创建models.py文件

from flask_sqlalchemy import SQLALchemy

db = SQLALchemy()

class Student(db.Model):
    id = db.Column(db.Integer,primary_key = True,autoincrement=True)
    s_name = db.Column(db.String(16),unique=True)
    s_age = db.Column(db.Integer,default=1)
    
    __tablename__ = 'student'

Integer 表示创建的字段类型为整形

Primary_key 表示为主键

String 表示为字符串

Unique 表示唯一

autoincrement 表示自增

3.3 创建表

在views.py中引入db

from app.models import db

@blue.route('/create_db/')
def create_db():
    db.create_all()
    return '删除成功'
    
@blue.route('/drop_db/')
def drop_db():
    db.drop_all()
    return '删除成功'

db.create_all() 表示创建定义模型中对应到数据库中的表

db.drop_all() 表示删除数据库中的所有的表

3.4初始化SQLALchemy

在文件的根目录下flask.py文件中使用SQLALchemy去整合一个或者多个Flask应用

方法一:

from app.models import db

db.init_app(app)

方法二:

from APP.models import db

def create_app():
    app = Flask(__name__)
    db.init_app(app)
    return app

3.5配置数据库的访问地址

在根目录下的flask1.py文件中如下配置:

app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['SQLALCHEMY_DATABASE_URI'] = "mysql+pymysql://root:123456@localhost:3306/HelloFlask"

HelloFlask 为数据库名称

3.6对学生数据进行CRUD操作

语法: 类名.query.xxx

获取查询集:all() filter(类名.属性名==xxx) filter_by(属性名=xxx)

3.6.1添加数据
def create_stu():
    stu = Student()
    stu.s_name = '小红'
    stu.s_age = 20
    
    db.session.add()
    db.session.commit()
    
    return '添加成功'
3.6.2 获取全部学生信息
def get_stu():
    students = Students.query.all()
    return render_template('xx.html',students=students)
3.6.3 获取某个学生的信息

写法1:

the_stu = Students.query.filter(Students.s_name=='小花')

写法2:

the_stu = Student.query.filter_by(s_name='小花')

写法3:

sql  = 'select * from student where s_name=小花 '
student =db.session.execute(sql)
3.6.4 修改学生信息

写法1:

students = Student.query.filter_by(s_id=3).first()
students.s_name = '小黑'
db.session.commit()

写法2:

Student.query.filter_by(s_id=3).update({'s_name':'小黑'})
db.session.commit()
3.6.5删除某个学生的信息
stu = Students.query.filter_by(s_id=2).first()
db.session.delete(stu)
db.session.commit()

Ps: 在数据库的增删改中,如果不在最后 db.session.commit() 则数据库中的数据不会更新,只会更新本地缓存的数据。

4.flask中的密码加密

方法1 使用Werkzeug

Werkzeug中的security模块可以很方便的实现哈希值的计算,只需要两个函数,分别用于用户注册和用户验证阶段

generate_password_hash(password,method=pbkdf2:sha1,salt_length=8):这个函数将原始密码作为输入,以字符串形式输出密码的哈希值。method和salt_length的默认值能满足大多数需求,这个用于注册,传入密码

check_password_hash(hash,password):这个函数参数是哈希值和用户输入的密码。返回值为True表示密码,用于用户验证,传入用户输入的密码和哈希值

5.关联关系

5.1一对多建立模型

学生模型:

class Student(db.Model):
    id = db.Column(db.Integer,primary_key=True,autoincrement=True)
    s_name = db.Column(db.String(20),unique=True,nullable=False)
    s_age = db.Column(db.Integer,default=1)
    s_grade = db.Column(db.Integer,db.ForeignKey('grade.g_id'),nullable=True)
    __tablename__ = 'student'

班级模型:

class Grade(db.Model):
    g_id = db.Column(db.Integer,primary_key=True,autoincrement=True)
    g_name = db.Column(db.String(20),unique=True)
    g_desc = db.Column(db.String(100),nullable=True)
    g_time = db.Column(db.Date,default=datetime.now)
    students = db.relationship('Student',backref='stu',lazy=True)

    __tablename__ = 'grade'

5.2 查询

表的外间由db.ForeignKey指定,传入的参数是表的字段。db.relationship 它声明的字段不作为表字段,第一个参数是关联的类的名字,backref是一个反向身份代理,相当于在Student类中添加了stu属性。可以直接在Students的实例.stu 就可以得到相对应的grade对象。 一般来说relationship写在 一对多的一这一边

5.3数据库迁移

5.3.1 安装migrate
pip install flask-migrate
5.3.2配置使用migrate
上一篇下一篇

猜你喜欢

热点阅读