黄勇-flask教程-学习笔记

课时4-虚拟环境

pip install virtualenv            #安装虚拟环境

virtualenv venv                                     #创建虚拟环境

..\venv\Scripts\activate                         #激活虚拟环境

课时10-url反转-url_for

url_for引用视图函数login()

<a href="{{url_for('login')}}">登陆</a>

url_for引用css文件

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

url_for引用img文件

<img class="logo" src="{{url_for('static',filename='images/zhiliaologo.png')}}">

课时17-继承和使用block

base.html

<!DOCTYPE html>
<html>
<head>
	<title>{%block title%}{%endblock%}-知了问答平台</title>
	{%block head%}{%endblock%}
</head>
<body>
<nav class="navbar navbar-default"></nav>
<div class="main">
	{%block main%}{%endblock%}
</div>
</body>
</html>

 index.html

{% extends 'base.html'%}

{%block title%}首页{%endblock%}

{%block head%}
	<link rel="stylesheet" type="text/css" href="{{url_for('static',filename='css/index.css')}}">
{%endblock%}

{%block main%}

{%endblock%}

课时21-安装mysql-python,flask-sqlalchemy

python3.6安装mysql-python,flask-sqlalchemy难题解决方案

参照https://www.cnblogs.com/bu1tcat/p/8283742.html

mysql-python安装

pip install MySQL-python

报错之后,到https://pypi.python.org/pypi/mysqlclient/1.3.10 下载驱动

接着安装驱动

pip install mysqlclient-1.3.10-cp36-cp36m-win32.whl

flask-sqlalchemy安装

pip install flask-sqlalchemy

问题解决

驱动放在“学习/python”

课时23-连接数据库

run.py

from flask_sqlalchemy import SQLAlchemy
import config

app.config.from_object(config)
db = SQLAlchemy(app)

db.create_all()

config.py

DIALECT = 'mysql'
DRIVER = 'mysqldb'
USERNAME = 'root'
PASSWORD = '123456'
HOST = '127.0.0.1'
PORT = '3306'
DATABASE = 'test1'

SQLALCHEMY_DATABASE_URI = "{}+{}://{}:{}@{}:{}/{}?charset=utf8".format(DIALECT,DRIVER,USERNAME,PASSWORD,HOST
                                             ,PORT,DATABASE)

课时24-sqlalchemy表与模型的映射

run.py

# article表:
# create table article (
#     id int primary key autoincrement,
#     title varchar(100) not null,
#     content text not null,
# )

class Article(db.Model):
    __tablename__ = 'articlez'
    id = db.Column(db.Integer,primary_key=True,autoincrement=True)
    title = db.Column(db.String(100),nullable=False)
    content = db.Column(db.Text,nullable=False)

课时25-flask-sqlalchemy的增删查改

        #增
	article1 = Article(title='aaa2',content='saiue')
	db.session.add(article1)
	db.session.commit()

	# 查
	article1 = Article.query.filter(Article.title == 'aaa2').first()

	return render_template('db.html',article1 = article1)

	# 改
	article1 = Article.query.filter(Article.title == 'aaa2').first()
	article1.title = 'new title'
	db.session.commit()

	# 删
	article1 = Article.query.filter(Article.id == 1).first()
	db.session.delete(article1)
	db.session.commit()

	return 'hello'

    老师模版

    增加:
    article1 = Article(title='aaa',content='bbb')
    db.session.add(article1)
    # 事务
    db.session.commit()

    # 查
    # select * from article where article.title='aaa';
    article1 = Article.query.filter(Article.title == 'aaa').first()
    print 'title:%s' % article1.title
    print 'content:%s' % article1.content

    # 改:
    # 1. 先把你要更改的数据查找出来
    article1 = Article.query.filter(Article.title == 'aaa').first()
    # 2. 把这条数据,你需要修改的地方进行修改
    article1.title = 'new title'
    # 3. 做事务的提交
    db.session.commit()

    删
    1. 把需要删除的数据查找出来
    article1 = Article.query.filter(Article.content == 'bbb').first()
    # 2. 把这条数据删除掉
    db.session.delete(article1)
    # 3. 做事务提交
    db.session.commit()

课时26-SQLAlchemy外键约束

class User(db.Model):
    __tablename__ = 'user'
    id = db.Column(db.Integer,primary_key=True,autoincrement=True)
    username = db.Column(db.String(100),nullable=False)

class Article(db.Model):
    __tablename__ = 'article'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    title = db.Column(db.String(100),nullable=False)
    content = db.Column(db.Text,nullable=False)
    author_id = db.Column(db.Integer,db.ForeignKey('user.id'))

    author = db.relationship('User',backref=db.backref('articles'))

    #第一种用法
    article = Article(title = '213s',content = 'wes')
    article.author = User.query.filter(User.id == 1).first()

    #第二种用法
    user = User.query.filter(User.id == 1).first()
    articles = user.articles    #根据db.backref('')里的参数

课时27-多对多关系

model映射关系

article_tag = db.Table('article_tag',
        db.Column('article_id',db.Integer,db.ForeignKey('article.id'),primary_key=True),
        db.Column('tag_id',db.Integer,db.ForeignKey('tag.id'),primary_key=True)
    )

class Article(db.Model):
    __tablename__ = 'article'
    id = db.Column(db.Integer,primary_key=True,autoincrement=True)
    title = db.Column(db.String(100),nullable=False)

    tags = db.relationship('Tag',secondary=article_tag,backref=db.backref('articles'))

class Tag(db.Model):
    __tablename__ = 'tag'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(100), nullable=False)

实操

article1 = Article(title='aaa')
article2 = Article(title='bbb')

tag1 = Tag(name='111')
tag2 = Tag(name='222')

article1.tags.append(tag1)
article1.tags.append(tag2)

article2.tags.append(tag1)
article2.tags.append(tag2)

db.session.add(article1)
db.session.add(article2)

db.session.add(tag1)
db.session.add(tag2)

db.session.commit()

课时29-分开models和解决循环引用

run.py

#encoding: utf-8

from flask import Flask
import config
from exts import db
from model import Article

app = Flask(__name__)
app.config.from_object(config)
db.init_app(app)

@app.route('/')
def hello():
	return 'sds'

if __name__ == '__main__':
    app.run(debug=True)

 model.py

from exts import db

class Article(db.Model):
    __tablename = 'article'
    id = db.Column(db.Integer,primary_key=True,autoincrement=True)
    title = db.Column(db.String(100),nullable=False)

 exts.py

#encoding: utf-8

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

课时30-flask-migrate

run.py

#encoding: utf-8

from flask import Flask
from exts import db
import config
from models import Article

app = Flask(__name__)
app.config.from_object(config)
db.init_app(app)

# 新建一个article模型,采用models分开的方式
# flask-scrpts的方式


@app.route('/')
def hello_world():
    return 'Hello World!'

if __name__ == '__main__':
    app.run(debug=True)

manager.py

#encoding: utf-8

from flask_script import Manager
from migrate_demo import app
from flask_migrate import Migrate,MigrateCommand
from exts import db
from models import Article

# init
# migrate
# upgrade
# 模型  ->  迁移文件  ->  表

manager = Manager(app)

# 1. 要使用flask_migrate,必须绑定app和db
migrate = Migrate(app,db)

# 2. 把MigrateCommand命令添加到manager中
manager.add_command('db',MigrateCommand)

if __name__ == '__main__':
    manager.run()

实操

# 模型  ->  迁移文件  ->  表

python manager.py db init                       #初始化,该命令只需执行一次,生成模型

python manager.py db migrate               #从模型生成迁移文件

python manager.py db upgrade              #从迁移文件映射到表

更改model.py后,需执行以下操作

#模型以初始化,无需再执行init方法

python manager.py db migrate               #从模型生成迁移文件

python manager.py db upgrade              #从迁移文件映射到表

 课时33-Flask的Session操作

run.py

from flask import session
import os


app.config['SECRET_KEY'] = os.urandom(24)

@app.route('/')
def index():
	session['username'] = 'ljg'
	return 'sdawe'

@app.route('/get/')
def get():
	return session.get('username')

@app.route('/del/')
def delete():
       #session.pop('username')    #只清除username
	session.clear()            #清除所有session
	return 'delete'

 课时34-设置session的过期时间

run.py

from datetime import timedelta

app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days = 7)

@app.route('/')
def index():
	session['username'] = 'ljg'
	session.permanent = True  #如果不设置时间,则过期时间为31天
	return 'sdawe'

课时36-get请求和post请求获取参数

from flask import request

@app.route('/search/')
def search():
    # arguments
    q = request.args.get('q')  #get获取信息方法
    return u'用户提交的查询参数是:%s' % q


# 默认的视图函数,只能采用get请求
# 如果你想采用post请求,那么要写明
@app.route('/login/',methods=['GET','POST'])
def login():
    if request.method == 'GET':
        return render_template('login.html')
    else:        #post获取信息方法
        username = request.form.get('username')
        password = request.form.get('password')
        print 'username:',username
        print 'password:',password
        return 'post request'

课时37-g全局变量

from flask import g

g.username = 'username'
#g.变量 = 全局变量值

课时 39-before_request钩子函数

@app.context_processor
def my_before_request():
    pass

在每次请求前执行

在每个视图函数执行前执行

课时41-导航条的完成

bootstrap中文网        http://www.bootcss.com/

打开bootstrap3中文文档 > 起步

 

 copy第1和第3到.html

因为1、3需要jq的依赖,所以到 https://www.bootcdn.cn/ 下搜索JQuery

引用min版到.html文件即可完成CDN加速

课时46-注册功能完成

注意事项:

run.py要添加db.init_app(app),否则会有如下报错,参考课程课时30

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值