Flask学习 黑马程序员-6节课入门Flask框架web开发视频(中途撤退,寻找py3教程)

Python-flask视频网站搭建

用flask-做一个资源网站(part1)-项目

黑马程序员-6节课入门Flask框架web开发视频
在这里插入图片描述

在这里插入图片描述
查看虚拟环境

Microsoft Windows [版本 10.0.18363.1256]
(c) 2019 Microsoft Corporation。保留所有权利。

C:\Users\Dontla>virtualenv --version
virtualenv 20.3.1 from d:\20191031_tensorflow_yolov3\python\lib\site-packages\virtualenv\__init__.py

C:\Users\Dontla>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

postman工具

https://www.postman.com/

get和post

在这里插入图片描述
在这里插入图片描述

如何给路由传参 解析

在这里插入图片描述

@app.route(’’)这个叫视图函数

Jinja2模板引擎

在这里插入图片描述

动态传参

flask_template_demo.py

# -*- coding: utf-8 -*-
"""
@File    : flask_template_demo.py
@Time    : 2021/1/26 16:41
@Author  : Dontla
@Email   : sxana@qq.com
@Software: PyCharm
"""
from flask import Flask, render_template

app = Flask(__name__)


@app.route('/')
def hello_world():
    url_str = 'www.baidu.com'
    return render_template('index.html', url_str=url_str)


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

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>FLASK TEST</title>
</head>
<body>
    这是模板<br>
    这是首页<br>
    {{url_str}} <br>
</body>
</html>

在这里插入图片描述

注释、变量代码块以及控制代码块的使用

在这里插入图片描述

注释:ctrl+/

<!---->

变量代码块使用

# -*- coding: utf-8 -*-
"""
@File    : flask_template_demo.py
@Time    : 2021/1/26 16:41
@Author  : Dontla
@Email   : sxana@qq.com
@Software: PyCharm
"""
from flask import Flask, render_template

app = Flask(__name__)


@app.route('/')
def hello_world():
    url_str = 'www.baidu.com'
    my_list = [1, 2, 3, 4, 5]
    my_dict = {
        'name': '黑马', 'url': 'www.tencent.com'
    }
    return render_template('index.html', url_str=url_str, my_list=my_list, my_dict=my_dict)


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

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>FLASK TEST</title>
</head>
<body>
这是模板<br>
这是首页<br>
{{url_str}} <br>
{{my_list}} <br>
{{my_list.2}} <br>
{{my_list[2]}} <br>
{{my_dict}} <br>
{{my_dict.name}} <br>
{{my_dict['name']}} <br>
</body>
</html>

控制代码块的使用 if for等(for循环)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>FLASK TEST</title>
</head>
<body>
这是模板<br>
这是首页<br>
{{url_str}} <br>
{{my_list}} <br>
{{my_list.2}} <br>
{{my_list[2]}} <br>
{{my_dict}} <br>
{{my_dict.name}} <br>
{{my_dict['name']}} <br>

<hr>

{% for i in my_list %}
    {% if i >=3 %}
        {{i}} <br>
    {% endif %}
{% endfor %}
</body>
</html>
# -*- coding: utf-8 -*-
"""
@File    : flask_template_demo.py
@Time    : 2021/1/26 16:41
@Author  : Dontla
@Email   : sxana@qq.com
@Software: PyCharm
"""
from flask import Flask, render_template

app = Flask(__name__)


@app.route('/')
def hello_world():
    url_str = 'www.baidu.com'
    my_list = [1, 2, 3, 4, 5]
    my_dict = {
        'name': '黑马', 'url': 'www.tencent.com'
    }
    return render_template('index.html', url_str=url_str, my_list=my_list, my_dict=my_dict)


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

过滤器的使用(比如小写转大写,获取第几个字符之类的)

在这里插入图片描述
在这里插入图片描述

web表单及验证

在这里插入图片描述

# -*- coding: utf-8 -*-
"""
@File    : flask_WTF.py
@Time    : 2021/1/27 14:10
@Author  : Dontla
@Email   : sxana@qq.com
@Software: PyCharm
"""
from flask import Flask, render_template, request

app = Flask(__name__)


@app.route('/', methods=["GET", "POST"])
def index():
    if request.method == 'POST':
        username = request.form.get('username')
        password = request.form.get('password')
        password2 = request.form.get('password2')
        if not all([username, password, password2]):
            return '参数不完整'
        else:
            return 'success'
    return render_template('index_WTF.html')


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

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>flask_WTF</title>
</head>
<body>
<form method="post">
    <label>用户名:</label><input type="text" name="username"><br>
    <label>密码:</label><input type="password" name="password"><br>
    <label>确认密码:</label><input type="password" name="password2"><br>
    <input type="submit" value="提交"><br>
</form>
</body>
</html>

在这里插入图片描述
在这里插入图片描述

flash消息闪现,给模板传递消息,消息加密(做混淆用)

flask_WTF.py

# -*- coding: utf-8 -*-
"""
@File    : flask_WTF.py
@Time    : 2021/1/27 14:10
@Author  : Dontla
@Email   : sxana@qq.com
@Software: PyCharm
"""
from flask import Flask, render_template, request, flash

app = Flask(__name__)
app.secret_key = '12345678'  # 随便填


@app.route('/', methods=["GET", "POST"])
def index():
    if request.method == 'POST':
        username = request.form.get('username')
        password = request.form.get('password')
        password2 = request.form.get('password2')
        if not all([username, password, password2]):
            # return '参数不完整'
            flash('参数不完整')
        else:
            # return 'success'
            return 'sucess'
    return render_template('index_WTF.html')


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

index_WTF.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>flask_WTF</title>
</head>
<body>
<form method="post">
    <label>用户名:</label><input type="text" name="username"><br>
    <label>密码:</label><input type="password" name="password"><br>
    <label>确认密码:</label><input type="password" name="password2"><br>
    <input type="submit" value="提交"><br>
    {% for message in get_flashed_messages() %}
    {{ message }}
    {% endfor %}
</form>
</body>
</html>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

表单样式的显示(使用flask_wtf模板创建表单)

https://www.bilibili.com/video/BV17W41177oE?p=16

# -*- coding: utf-8 -*-
"""
@File    : flask_WTF.py
@Time    : 2021/1/27 14:10
@Author  : Dontla
@Email   : sxana@qq.com
@Software: PyCharm
"""
from flask import Flask, render_template, request, flash
from flask_wtf import FlaskForm
from wtforms import SubmitField, PasswordField, StringField

app = Flask(__name__)
app.secret_key = '12345678'  # 随便填


# 自定义表单类
class LoginForm(FlaskForm):
    username = StringField('用户名:')
    password = PasswordField('密码:')
    password2 = PasswordField('确认密码:')
    submit = SubmitField('提交')


@app.route('/form', methods=['GET', 'POST'])
def login():
    login_form = LoginForm()

    # 1. 判断请求方式
    if request.method == 'POST':

        # 2. 获取请求的参数
        username = request.form.get('username')
        password = request.form.get('password')
        password2 = request.form.get('password2')

        # 3. 验证参数. WTF可以一句话就实现所有的校验
        # 我们没有CSRF token
        if login_form.validate_on_submit():
            print(username, password)
            return 'success'
        else:
            flash('参数有误')

    return render_template('index_WTF.html', form=login_form)


@app.route('/', methods=["GET", "POST"])
def index():
    if request.method == 'POST':
        username = request.form.get('username')
        password = request.form.get('password')
        password2 = request.form.get('password2')
        if not all([username, password, password2]):
            # return '参数不完整'
            flash('参数不完整')
        else:
            # return 'success'
            return 'sucess'
    return render_template('index_WTF.html')


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

index_WTF.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>flask_WTF</title>
</head>
<body>
<form method="post">
    <label>用户名:</label><input type="text" name="username"><br>
    <label>密码:</label><input type="password" name="password"><br>
    <label>确认密码:</label><input type="password" name="password2"><br>
    <input type="submit" value="提交"><br>
    {% for message in get_flashed_messages() %}
    {{ message }}
    {% endfor %}
</form>

<hr>

<form method="post">
    {{ form.csrf_token() }}
    {{ form.username.label }}{{ form.username }} <br>
    {{ form.password.label }}{{ form.password }} <br>
    {{ form.password2.label }}{{ form.password2 }} <br>
    {{ form.submit}} <br>
</form>
</body>
</html>

在这里插入图片描述

模板表单的验证 csrf_token

常用验证函数
在这里插入图片描述
怎么使用?
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
老师说validators是复数,所以可以传个列表,这推导??

但这写个tuple是啥意思?反正就是可迭代对象就行?(不能用tuple,会报错,只能用列表)
在这里插入图片描述

# -*- coding: utf-8 -*-
"""
@File    : flask_WTF.py
@Time    : 2021/1/27 14:10
@Author  : Dontla
@Email   : sxana@qq.com
@Software: PyCharm
"""
from flask import Flask, render_template, request, flash
from flask_wtf import FlaskForm
from wtforms import SubmitField, PasswordField, StringField
from wtforms.validators import DataRequired, EqualTo

app = Flask(__name__)
app.secret_key = '12345678'  # 随便填


# 自定义表单类
class LoginForm(FlaskForm):
    username = StringField('用户名:', validators=[DataRequired()])
    password = PasswordField('密码:', validators=[DataRequired()])
    password2 = PasswordField('确认密码:', validators=[DataRequired(), EqualTo('password', '提示:密码填入不一致')])
    submit = SubmitField('提交')


@app.route('/form', methods=['GET', 'POST'])
def login():
    login_form = LoginForm()

    # 1. 判断请求方式
    if request.method == 'POST':

        # 2. 获取请求的参数
        username = request.form.get('username')
        password = request.form.get('password')
        password2 = request.form.get('password2')

        # 3. 验证参数. WTF可以一句话就实现所有的校验
        # 我们没有CSRF token
        if login_form.validate_on_submit():
            print(username, password)
            return 'success'
        else:
            flash('参数有误')

    return render_template('index_WTF.html', form=login_form)


@app.route('/', methods=["GET", "POST"])
def index():
    if request.method == 'POST':
        username = request.form.get('username')
        password = request.form.get('password')
        password2 = request.form.get('password2')
        if not all([username, password, password2]):
            # return '参数不完整'
            flash('参数不完整')
        else:
            # return 'success'
            return 'success'
    return render_template('index_WTF.html')


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

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>flask_WTF</title>
</head>
<body>
<form method="post">
    <label>用户名:</label><input type="text" name="username"><br>
    <label>密码:</label><input type="password" name="password"><br>
    <label>确认密码:</label><input type="password" name="password2"><br>
    <input type="submit" value="提交"><br>
    {% for message in get_flashed_messages() %}
    {{ message }}
    {% endfor %}
</form>

<hr>

<form method="post">
    {{ form.csrf_token() }}
    {{ form.username.label }}{{ form.username }} <br>
    {{ form.password.label }}{{ form.password }} <br>
    {{ form.password2.label }}{{ form.password2 }} <br>
    {{ form.submit}} <br>
</form>
</body>
</html>

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

Flask中使用SQL数据库 SQLAlchemy(flask_sqlalchemy)(如果是使用mysql数据库,安装flask_mysqldb)

在这里插入图片描述

# -*- coding: utf-8 -*-
"""
@File    : flask_sqlalchemy_demo.py
@Time    : 2021/2/5 14:49
@Author  : Dontla
@Email   : sxana@qq.com
@Software: PyCharm
"""
from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
# 配置数据库地址
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:mysql@127.0.0.1/flask_sql_demo'
# 跟踪数据库修改 -- 不建议开启(消耗性能,同时未来版本中会移除)
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)


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


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

在电脑上还要创建sql数据库??

装好了,按照这个安装就行

数据库mysql是什么?win10如何安装使用mysql?

然后控制台执行命令,登入数据库:

C:\Users\Dontla>mysql -u root -p
Enter password: ****
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 8.0.23 MySQL Community Server - GPL

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

创建数据库:

mysql> create database flask_demo charset=utf8;
Query OK, 1 row affected, 1 warning (0.02 sec)

mysql>

使用数据库:

mysql> use flask_sql_demo;
Database changed
mysql>

显示数据库表单:

mysql> show tables;
Empty set (0.01 sec)

mysql>

mysql数据模型的定义 常用SQLAlchemy字段类型/列选项/关系选项

在这里插入图片描述
表格式:
在这里插入图片描述
两个表做两个class

代码看下一节

数据库基本操作,增删改 db.session

在这里插入图片描述
我勒个去,应该找个python3的教程的,这个python2很多库用法不支持,替换也替换不了。。。。https://www.bilibili.com/video/BV17W41177oE?p=20&spm_id_from=pageDriver到此为止,再见!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dontla

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值