黄勇-flask教程-学习笔记

2023-10-27

课时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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

黄勇-flask教程-学习笔记 的相关文章

  • 毕设分享 机器人工程专业毕设选题推荐

    文章目录 1前言 2 如何选题 3 机器人工程 毕设 选题推荐 4 最后 1前言 近期不少学弟学妹询问学长关于机器人工程专业工程专业相关的毕设选题 学长特意写下这篇文章以作回应 以下是学长亲手整理相关的毕业设计选题 都是经过学长精心审核的题
  • 使用laravel-admin后台sdk报错Failed to load resource: net::ERR_CERT_AUTHORITY_INVALID、Provisional headers a...

    报错Failed to load resource net ERR CERT AUTHORITY INVALID请先确定自己的资源url是否可以确实访问到 地址正确与否 访问权限是否开启等 若network中有静态资源报错Provision
  • adworld-web-inget-20221226

    inget 题目来源 宜兴网信办 题目描述 无 题目场景 http 61 147 171 105 51222 http 61 147 171 105 51222 id 1 27 20 20or 201 1 20 Please enter I
  • 数字后端基本概念介绍——Macro

    今天要介绍的数字后端基本概念是Macro 中文名宏单元 这是设计中最常见的一个单元了 Macro是一个宽泛的概念 通常我们把它分为硬核 Hard Macro 和软核 Soft Macro 硬核就是我们最常见的Hard Marco 包括Mem
  • 【Redis】3、Redis 作为缓存(Redis中的穿透、雪崩、击穿、工具类)

    目录 一 什么是缓存 二 给业务添加缓存 减少数据库访问次数 三 给店铺类型查询业务添加缓存 1 使用 String 类型 2 使用 List 类型 四 缓存的更新策略 1 主动更新 2 最佳实现方案 3 给查询商铺的缓存添加超时剔除和主动
  • Linux文件目录操作命令

    目录 Linux常用的基础命令 使用技巧 1 ls命令 查看当前目录所有内容 ls 命令的多种使用方法 注 假如执行乱码 则执行以下两步的代码 2 cd命令 切换当前工作目录 即进入指定目录 3 cat命令 显示文件内容 4 more命令
  • 智能语音技术的深度解析

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 本文由腾讯云AI中心发表于云 社区专栏 广义上来讲智能语音技术有各种各样的定义 以上是常见的一些热门的场景 语音识别 刚才罗老师也分享了部分内容 语音合成是文字变成语音 这部分我们后
  • Linux 引导过程概述

    引导过程 一 引导过程 引导过程总览 1 开机自检 2 MBR引导 3 GRUB菜单 4 加载Linux 内核 5 INIT 进程初始化 二 INIT 进程 1 INIT进程 2 inittab 配置文件 inittab文件中的字段 1 i
  • 手写线程池

    package cn pzh xzh javaee thread import javafx concurrent Worker import java util ArrayList import java util LinkedList
  • 【AD20学习笔记】PCB设计规则设置及手工布线

    7 21 今天干了啥 7 22 7 23 7 24 啊 咋24号了 回流为什么要打孔啊 数字地 信号地的区别 本章快捷键 shift E 捕捉捕捉不到的点 可以控制高亮的亮度 L 表示显示的板层 网络可以右击选择改变颜色 然后选择显示替换
  • C# 一种求平方根的方法 立方根也可以 极大 极小都可以

    不知道研究这些干啥 纯纯的浪费时间 public static double TQSquare double number Random random1 new Random DateTime Now Millisecond double
  • 少儿编程教育机构

    计算机就像一个人 才刚刚清醒 但已经改变了生活中的很多东西 革新了旧行业 也出现了许多新的商业模式 比如 淘宝购物 滴滴打车 支付宝付款 高德地图导航等这些习以为常的App 以及作为纽带的互联网 无不来自于我们所编写的程序 格物斯坦小坦克认
  • python期末版二版-习题题库

    Python程序设计 题库 一 填空题 1 Python安装扩展库常用的是 工具 pip 2 Python标准库math中用来计算平方根的函数是 sqrt 3 Python程序文件扩展名主要有 和两种 其中后者常用于GUI程序 py pyw
  • vue获取当前时间的前七天日期

  • SpringBoot项目配置国际化

    1 引言 效果 1 根据浏览器默认语言设置的信息切换国际化 2 点击链接切换语言 2 配置步骤 1 设置file encoding 如果不设置 获取properties内容会乱码 当前项目配置 点击setting搜索file encodin
  • 报错Unmet dependencies. Try 'apt --fix-broken install' with no packages (or specify a solution).解决方法

    在Ubuntu中用apt get安装软件 系统报出Unmet dependencies错误 Unmet dependencies Try apt fix broken install with no packages or specify
  • MYSQL的慢查询

    通过查询SQL的执行频次 我们就能够知道当前数据库到底是增删改为主 还是查询为主 那假如说是以查询为主 次数我们可以借助于慢查询日志 接下来 我们就来介绍一下MySQL中的慢查询日志 慢查询日志 慢查询日志记录了所有执行时间超过指定参数 l
  • 基于RuoYi框架快速搭建自己的后台管理系统

    RuoYi的介绍 RuoYi是一个后台管理系统 基于经典技术组合 Spring Boot Apache Shiro MyBatis Thymeleaf 主要目的让开发者注重专注业务 降低技术难度 从而节省人力成本 缩短项目周期 提高软件安全
  • 极路由2刷机为openwrt固件

    1 随着极路由插件app hiwifi com网站关闭 极路由现在想要活动root权限以及刷其他固件就变得很麻烦 最近家里的极路由2发现网络好像经常有问题不知道是不是固件问题 于是就想着刷固件 型号 极路由2 产品 HC5761 2 很多刷
  • numba.cuda OpenCV 图像处理

    文章目录 一 什么是numba 二 代码实现 三 实验结果 一 什么是numba python numba numba cuda numba能够帮助python进行动态编译 JIT 通过借助numba cuda可以实现对GPU的动态编译 实

随机推荐

  • html设置鼠标移入移出样式,vue鼠标移入添加class样式,鼠标移出去除样式(active)实现方法...

    鼠标移入添加class样式 HTML HTML绑定事件 加入或者移出class为active 流量套餐 JS 这里除了active这个class需要动态添加或者减去 其他的皆是移入移出都需要的class methods changeActi
  • 网页前端(HTML)

    CSS 下拉菜单 使用 CSS 创建一个鼠标移动上去后显示下拉菜单的效果 基本下拉菜单 当鼠标移动到指定元素上时 会出现下拉菜单 HTML 部分 我们可以使用任何的 HTML 元素来打开下拉菜单 如 span 或 a span
  • 小程序和H5上传图片转成Base64格式

    小程序和H5上传图片转成Base64格式 文章目录 小程序和H5上传图片转成Base64格式 前言 一 Base64是什么 二 Base转换 小程序的转换 小程序使用getFileSystemManager来获取文件管理器 使用 fileM
  • springboot里结合layui对表格数据的一些记录

    js代码 var layui active reload function 处理人的选择 var handler handler input name handler checked val 获取选中的值 var systemNo var
  • OpenSSL中AES加密的用法

    OpenSSL中AES加密的用法 作者 游蓝海 原文链接 http blog csdn net you lan hai article details 50992719 转载请注明出处 使用API的时候 需要特别小心数据长度 我在初次使用的
  • 美学生用ChatGPT写论文被识破,导师:好到不符合我对学生的预期

    据央视网快看微博3月20日消息 北密歇根大学的教授奥曼在学生作业中发现了一篇关于世界宗教的 完美论文 这篇文章写得比大多数学生都要好 好到不符合我对学生的预期 他去问ChatGPT 这是你写的吗 ChatGPT回答 99 9 的概率是的 C
  • Vue项目运行报错:“TypeError: Cannot read properties of undefined (reading ‘$on‘)“

    报错原因 无法读取未定义的属性 on 解决方法 在main js加入代码 event Bus 用于无关系组件间的通信 Vue prototype bus new Vue 我是零基础自学的菜鸟 想把这里作为笔记记录 下来我在编程路上遇到的bu
  • 政企市场,「观望」AI大模型

    数据安全等 刚需 下 私有化成为政企市场的准入门槛 然而私有化下 行业模型局限性尚未可知 加之信创化等因素 厂商仍需取长补短 为政企客户提供全方位的解决方案 作者 斗斗 编辑 皮爷 出品 产业家 政企领域 似乎正在成为AI落地的又一标的 几
  • 持安-大连万达集团零信任项目入选中国信通院2023零信任优秀案例

    2023年8月25日 以 链接云端 可信而安 为主题的 2023首届SecGo云和软件安全大会 在京隆重召开 会上 中国信息通信研究院重磅揭晓了 安全守卫者计划 优秀案例评选结果 零信任办公安全技术创新企业持安科技 与用户大连万达集团联合申
  • jackson 包版本低导致java.lang.NoSuchMethodError

    1 起因 本地window10项目运行无误 发布项目到正式环境Liunx系统后编译打包部署都没有问题 但是验证一个双因子认证功能时就报错 2 我看到这个错误 就知道肯定是 Maven 依赖问题 要么是版本冲突 存在不同版本的 2 个相同依赖
  • vite与webpack区别

    vite与webpack区别 在浏览器支持 ES 模块之前 JavaScript 并没有提供的原生机制让开发者以模块化的方式进行开发 这也正是我们对 打包 这个概念熟悉的原因 使用工具抓取 处理并将我们的源码模块串联成可以在浏览器中运行的文
  • Xilinx 7 系列 serdes速度

    目录 一 各器件的速率 一 各器件的速率 High speed interfaces including Serial ATA Aurora 1G Ethernet PCI Express OBSAI CPRI EPON GPON Disp
  • 将图片通过高通滤波进行锐化处理_AI智能图片清晰放大神器强势来袭,简直无敌了[189期]...

    获取方式请查看文章底部 点击上方 知秋设计素材 点右上角 点选 设为星标 AI智能图片无损放大神器 MAC WIN AI智能图片锐化清晰神器 mac win AI智能图片无损放大神器 Topaz A I Gigapixel是一款非常实用的A
  • Jenkins在centos环境下连接gitee报错问题

    问题描述 在centos环境下jenkins配置gitee时测试连接出现无法连接ERROR问题 期初怀疑是加速镜像导致gitee插件失效问题 后来看了后台错误日志后发现在centos环境下缺失jar包 之前在windows环境下测试不会出现
  • buildroot教程

    什么是buildroot Buildroot是Linux平台上一个开源的嵌入式Linux系统自动构建框架 0 下载buildroot Buildroot版本每2个月 2月 5月 8月和11月发布一次 版本号的格式为YYYY MM 例如201
  • 【翻译】全新16英寸MacBook Pro评测:开发人员的梦想成真

    要问现在适合开发者用的笔记本 市面上还是有很多选择的 比如Dell的XPS系列 外星人系列 游戏也是杠杠滴 联想拯救者系列 还有形形色色的高配机型 价格也从几千到几万不等 但是 笔吧评测室的猪哥说过 从一万元开始 就已经难以用定位的方式来给
  • Mycat windows安装

    id iframe1033655 0 src http pos baidu com jcrm rtbid 2097325 rdid 9223372032564562618 dc 2 di 1033655 dri 0 dis 0 dai 1
  • 报错:JSONException: illegal identifier : \pos 1, line 1, column 2 或not close json text, token : error

    报错 JSONException illegal identifier pos 1 line 1 column 2 或JSONException not close json text token error 简述问题 处理 结果 简述问题
  • spring IOC控制反转及IOC实现的三种方式和bean标签使用

    spring IOC控制反转及IOC实现的三种方式和bean标签使用 IOC 控制反转 简单的说是指对象的创建不再使用new 而是由spring框架创建 当服务器开始运行时 读取spring的主配置文件 经过spring框架从主配置文件中识
  • 黄勇-flask教程-学习笔记

    课时4 虚拟环境 pip install virtualenv 安装虚拟环境 virtualenv venv 创建虚拟环境 venv Scripts activate 激活虚拟环境 课时10 url反转 url for url for引用视