知了传课Flask学习(持续更新)

一、基础内容

1.Flask快速应用

pip install flask

from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    return 'Hello world'

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

 2.debug、host、port配置

from flask import Flask,request

app = Flask(__name__)

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


if __name__ == '__main__':
    # debug模型:实时修改更新代码
    # 修改host:修改主机号
    # 修改port:修改端口号
    app.run(debug=True,host='localhost',port=8080)

3.URL与视图的映射

from flask import Flask,request

app = Flask(__name__)

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

@app.route('/profile')
def profile():
    return '我是个人中心'

@app.route('/blog/<int:id>')
def blog_detail(id):
    return f'您访问的博客是{id}'

# /book/list:返回第一页数据
# /book/list?page=2:返回第二页数据
@app.route('/book/list')
def book_list():
    page = request.args.get('page',default=1,type=int)
    return  f'您获取的是第{page}页图书列表'

if __name__ == '__main__':
    # debug模型:实时修改更新代码
    # 修改host:修改主机号
    # 修改port:修改端口号
    app.run(debug=True,host='localhost',port=8080)

4.Flask连接MySQL数据库

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import text
from flask_migrate import Migrate

app = Flask(__name__)

HOSTNAME = '127.0.0.1'
PORT = 3306
USERNAME = 'root'
PASSWORD = 'root'
DATABASE = 'test'
app.config['SQLALCHEMY_DATABASE_URI'] = f"mysql+pymysql://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}?charset=utf8mb4"

# app.config设置好连接数据库的信息
# 使用SQLAlchemy(app)创建一个db对象

db = SQLAlchemy(app)
migrate = Migrate(app, db)

# 测试链接
with app.app_context():
    with db.engine.connect() as conn:
        query = text("select 1")  # 使用text函数创建可执行的对象
        rs = conn.execute(query)
        print(rs.fetchone())

@app.route('/')
def hello_world():
    return "hello world"

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

5.ORM与表的映射

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

6.ORM的增删改查

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import text
from flask_migrate import Migrate

app = Flask(__name__)

HOSTNAME = '127.0.0.1'
PORT = 3306
USERNAME = 'root'
PASSWORD = 'root'
DATABASE = 'test'
app.config['SQLALCHEMY_DATABASE_URI'] = f"mysql+pymysql://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}?charset=utf8mb4"

# app.config设置好连接数据库的信息
# 使用SQLAlchemy(app)创建一个db对象

db = SQLAlchemy(app)
migrate = Migrate(app, db)

# 测试链接
with app.app_context():
    with db.engine.connect() as conn:
        query = text("select 1")  # 使用text函数创建可执行的对象
        rs = conn.execute(query)
        print(rs.fetchone())

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

@app.route('/user/add')
def add_user():
    user = User(username='yld',password='123456')
    db.session.add(user)
    db.session.commit()
    return '用户创建成功'

@app.route('/user/query')
def query_user():
    # 1.get查找 根据主键查找
    user = User.query.get(1)
    print(f'{user.username}')
    return '数据查找成功'
    # 2.filter_by查找
    users = User.query.filter_by(username = 'yld')
    for i in users:
        print(i.id)
    return '数据查找成功'

@app.route('/user/update')
def update_user():
    users = User.query.filter_by(username = 'yld').first()
    users.password = '222222'
    db.session.commit()
    return '数据修改成功'

@app.route('/user/delete')
def delete_user():
    users = User.query.filter_by(username = 'yld').first()
    db.session.delete(users)
    db.session.commit()
    return '数据删除成功'

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

    #添加作者外键
    author_id = db.Column(db.Integer,db.ForeignKey('user.id'))
    #backref:自动给User模型添加一个articles属性,用来获取文章列表
    author = db.relationship('User',backref='articles')



@app.route('/article/add')
def article_add():
    article = Article(title='Flask学习', content='数据库')
    user = User.query.filter_by(username = 'yld').first()

    article.author_id = user.id
    article.author = user

    db.session.add(article)
    db.session.commit()

    return '文章添加成功'



@app.route('/')
def hello_world():
    return "hello world"

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

二、内容实战

1.博客平台项目搭建

①app.py

from flask import Flask
import config
from exts import db
from models import UserModel
from blueprints.qa import qa
from blueprints.auth import auth
from flask_migrate import Migrate

app = Flask(__name__)

app.config.from_object(config)

db.init_app(app)
migrate = Migrate(app,db)

app.register_blueprint(auth)
app.register_blueprint(qa)

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

②config.py

HOSTNAME = '127.0.0.1'
PORT = 3306
USERNAME = 'root'
PASSWORD = 'root'
DATABASE = 'test'

DB_URI =  f"mysql+pymysql://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}?charset=utf8mb4"

SQLALCHEMY_DATABASE_URI = DB_URI

③exts.py

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

2.User模型搭建

model.py

from exts import db
from datetime import datetime

class UserModel(db.Model):
   __tablename__ = 'user'
   id = db.Column(db.Integer,primary_key=True,autoincrement=True)
   username = db.Column(db.String(100),nullable=False)
   password = db.Column(db.String(100),nullable=False)
   email = db.Column(db.String(100),nullable=False,unique=True)
   join_time = db.Column(db.DateTime,default=datetime.now)

迁移命令:

flask db init

flask db migrate

flask db upgrade

3.注册页面渲染

①register.html

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="{{url_for('static',filename='bootstrap/bootstrap.4.6.min.css')}}">
    <link rel="stylesheet" href="{{url_for('static',filename='css/init.css')}}">

    <title>知了问答平台-注册</title>
</head>

<body>
    <nav class="navbar navbar-expand-lg navbar-light bg-light">
        <div class="container">
            <a class="navbar-brand" href="#">知了问答</a>
            <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent"
                aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
                <span class="navbar-toggler-icon"></span>
            </button>
            <div class="collapse navbar-collapse" id="navbarSupportedContent">
                <ul class="navbar-nav mr-auto">
                    <li class="nav-item active">
                        <a class="nav-link" href="/">首页 <span class="sr-only">(current)</span></a>
                    </li>
                    <li class="nav-item">
                        <a class="nav-link" href="#">发布问答</a>
                    </li>
                    <li class="nav-item ml-2">
                        <form class="form-inline my-2 my-lg-0" method="GET" action="#">
                            <input class="form-control mr-sm-2" type="search" placeholder="关键字" aria-label="Search"
                                name="q">
                            <button class="btn btn-outline-success my-2 my-sm-0" type="submit">搜索</button>
                        </form>
                    </li>
                </ul>
                <ul class="navbar-nav">
                    <li class="nav-item">
                        <a class="nav-link" href="#">登录</a>
                    </li>
                    <li class="nav-item">
                        <a class="nav-link" href="#">注册</a>
                    </li>
                </ul>
            </div>
        </div>
    </nav>
    <div class="container">
        <div class="row mt-4">
            <div class="col"></div>
            <div class="col">
                <form method="POST" action="#">
                    <div class="form-group">
                        <label for="exampleInputEmail1">邮箱</label>
                        <input type="email" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp"
                            name="email">
                        <small id="emailHelp" class="form-text text-muted">我们不会把邮箱用于其他用户</small>
                    </div>
                    <div class="form-group">
                        <label for="exampleInputEmail1">验证码</label>
                        <div class="input-group">
                            <input type="text" class="form-control" name="captcha">
                            <div class="input-group-append">
                                <button class="btn btn-outline-secondary" type="button" id="captcha-btn">获取验证码</button>
                            </div>
                        </div>
                    </div>
                    <div class="form-group">
                        <label for="exampleInputEmail1">用户名</label>
                        <input type="text" class="form-control" name="username">
                    </div>
                    <div class="form-group">
                        <label for="exampleInputPassword1">密码</label>
                        <input type="password" class="form-control" id="exampleInputPassword1" name="password">
                    </div>
                    <div class="form-group">
                        <label for="exampleInputPassword1">确认密码</label>
                        <input type="password" class="form-control" name="password_confirm">
                    </div>
                    <button type="submit" class="btn btn-primary btn-block">立即注册</button>
                </form>
            </div>
            <div class="col"></div>
        </div>
    </div>
</body>

</html>

 ②auth.py

from flask import Blueprint, render_template

auth = Blueprint('auth', __name__, url_prefix='/auth')


@auth.route('/register')
def register():
    return render_template('register.html')

4.Flask发送邮件功能

5.后端注册表单验证器实现

pip install flask-wtf

6.后端注册功能完成

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 知了是一个在线教育平台,提供了丰富的程资源,包括Python Flask框架。Flask是一个用Python编写的轻量级Web应用框架,基于Werkzeug和Jinja2工具库。它的设计简单而灵活,具有扩展性强、学习曲线低的特点。 Flask源代码包括许多模块和功能,我将简略介绍一下其中的几个主要部分。 1. App.py:这是Flask应用的入口文件,负责初始化Flask应用并定义路由和视图函数。在这个文件中,我们可以设置应用的配置信息、注册蓝图(Blueprint)以及启动应用的主函数。 2. Templates文件夹:这个文件夹存放着应用的HTML模板文件。在这些模板文件中,我们可以使用Jinja2模板引擎来动态地生成HTML内容,将数据和模板进行绑定。 3. Static文件夹:这个文件夹存放着应用的静态资源文件,如CSS样式表、JavaScript脚本和图片等。这些文件可以被直接访问而不需要经过服务器的处理。 4. Models.py:在这个文件中定义了应用的数据模型,通过使用ORM(对象关系映射)库如SQLAlchemy来操作数据库。我们可以定义各种数据模型类,如用户、程、评论等,以及它们之间的关系。 5. Forms.py:这个文件中定义了应用的表单类,用于处理用户提交的数据。通过使用表单类,我们可以方便地验证用户的输入数据,并生成对应的HTML表单。 6. Views.py:这个文件中定义了应用的视图函数,用于处理具体的请求和返回相应的响应。在这些函数中,我们可以通过获取用户请求的数据,进行相应的处理,并返回给用户需要的内容。 以上是Flask源代码的简要介绍,它们共同组成了一个完整的Flask应用。使用Flask框架开发应用,可以快速构建功能完善的Web应用,并且在学习过程中可以逐渐深入了解框架的实现原理,实现更多复杂的功能。 ### 回答2: 知了是一个在线教育平台,它的源代码是使用Python语言编写的,使用了一个轻量级的Web框架FlaskFlask是一个开源的微型Web框架,它简洁而灵活,适合快速开发小型的Web应用程序。Flask提供了路由、模板引擎、表单处理和会话管理等基本功能。知了使用Flask来构建网站的后端,处理用户的请求和数据。 Flask的源代码包含了不同的模块和文件,其中的主要文件包括应用程序实例(app.py),路由处理(routes.py),模型定义(models.py),模板文件(templates文件夹)和静态文件(static文件夹)等。 在app.py文件中,首先创建了一个Flask应用程序实例,并加载配置信息。然后通过导入和注册蓝图(Blueprints),来组织和管理不同的功能模块。蓝图是一种在Flask中组织和管理应用程序的方式,可以将不同的功能模块分别定义在不同的蓝图中,方便扩展和维护。 在routes.py文件中,定义了不同的路由,每个路由对应着一个URL路径和相应的处理函数。处理函数可以接收并处理用户的请求,从数据库中获取数据,渲染模板,并返回给用户。通过设置路由和视图函数的装饰器,将路由和相应的处理函数关联起来。 在models.py文件中,定义了应用程序的数据模型,包括用户、程、章节等。通过定义数据模型,可以对数据进行持久化和操作,如保存用户的注册信息、获取和展示程的相关信息等。 在templates文件夹中,包含了网页模板文件,用于展示数据和与用户进行交互。模板使用类似HTML的语法,可以插入动态的内容和控制结构,方便生成动态的网页。 在static文件夹中,包含了静态文件,如CSS样式表、JavaScript脚本和图片等。这些文件用于美化和增强用户界面,提供更丰富的交互和用户体验。 综上所述,知了的源代码使用Flask框架开发,通过定义路由、处理函数、数据模型和模板等,来实现用户的请求处理、数据存储和网页展示等功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值