python-Flask框架进阶

Python Flask框架(进阶1) 项目布局 创建一个目录。 简单的flask只有一个文件。 然而,随着项目变得越来越大,将所有代码保存在一个文件中就变得非常困难。Python项目使用包将代码组织成多个模块,这些模块可以在需要时导入。 项目目录将包含: flaskr/, 一个包含应用程序代码和文件的python包。 tests/, 一个包含测试模块的目录。 venv/,一个python虚拟环境,其中安装了flask和其他以来项目。... 阅读详情

Flask-SQL Alchemy

Flask-SQL Alchemy 是一个为Flask应用提供SQL Alchemy 支持的扩展库。SQL Alchemy 是Python中的一种ORM(对象关系映射)工具,可以将类映射到数据库表。

在 Flask 中使用 MySQL 数据库,可以使用 SQL Alchemy 和 Alembic 这两个扩展来创建模型和执行数据库迁移。

安装扩展:

pip install flask flask-sqlalchemy flask-migrate

配置 Flask 应用:

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

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://username:password@localhost/database'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
#设置为 True 时,Flask SQLAlchemy 会自动追踪对象的修改,并在需要时自动更新数据库。这种自动追踪功能在一些情况下可能会有性能问题,因为它需要通过比较对象状态来确定对象是否被修改。

db = SQLAlchemy(app)

# 定义数据模型

migrate = Migrate(app, db)

在上述代码中,你需要将 'username'、'password' 和 'database' 替换为你的 MySQL 数据库的实际连接信息。

创建模型:

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)

    def __repr__(self):
        return '<User {}>'.format(self.username)

在这个示例中,我们创建了一个名为 User 的模型,包含了 id、username 和 email 字段。

常用字段类型

db.String(length):用于存储字符串,length参数指定最大长度,例如 db.String(80) 表示最大长度为80个字符的字符串。
db.Integer:用于存储整数。
db.Float:用于存储浮点数。
db.Boolean:用于存储布尔值,表示True或False。
db.Date:用于存储日期。
db.DateTime:用于存储日期和时间。
db.Time:用于存储时间。
db.Text:用于存储大文本数据,例如长文章或备注。

常用列属性

unique :唯一  
nullable :可以为空
primary_key:指定列为主键。
default:设置列的默认值。
autoincrement:指定列为自增长列。

执行数据库迁移操作:

  • 首次迁移:

    # Error: No such command 'db'
    # 解决办法 set FLASK_APP=realproject(真实环境配置的项目名:例如app.py)
    flask db init
    
    flask db migrate
    flask db upgrade
    
    
  • 后续迁移:

    flask db migrate
    flask db upgrade
    
    

这些命令会创建一个用于存储迁移脚本的 migrations 文件夹,并在 MySQL 数据库中创建相应的表。

这样,你就可以使用 db 对象来执行数据库操作,例如插入、查询等。

基础的查找、更新、删除、过滤以及多表查询等常规操作,可以使用 SQL Alchemy 提供的查询API和SQL Alchemy ORM的功能。

查找数据:

# 查找单个对象
user = User.query.filter_by(username='john').first()

# 查找多个对象
users = User.query.filter_by(is_active=True).all()

# 根据主键查找对象
user = User.query.get(1)

# 使用过滤器和逻辑操作符查找对象
users = User.query.filter(User.age > 18, User.age < 30).all()

更新数据:

# 更新单个对象的属性
user = User.query.get(1)
user.username = 'new_username'
db.session.commit()

# 使用过滤器更新多个对象的属性
User.query.filter_by(is_active=True).update({'is_active': False})
db.session.commit()

删除数据:

# 删除单个对象
user = User.query.get(1)
db.session.delete(user)
db.session.commit()

# 根据过滤器删除多个对象
User.query.filter_by(is_active=False).delete()
db.session.commit()

过滤查询结果:

# 返回指定字段
users = User.query.with_entities(User.username, User.email).all()

# 按字段排序
users = User.query.order_by(User.username.asc()).all()

# 使用逻辑操作符过滤数据
users = User.query.filter(User.age > 18, User.age < 30).all()
from sqlalchemy import and_, or_, not_

# 查询满足多个条件的记录
result = db.session.query(Table).filter(and_(condition1, condition2)).all()

# 查询满足任一条件的记录
result = db.session.query(Table).filter(or_(condition1, condition2)).all()

# 查询不满足条件的记录
result = db.session.query(Table).filter(not_(condition)).all()

# 使用 IN 操作符
users = User.query.filter(User.username.in_(['john', 'jane'])).all()

多表查询:

使用join

result = db.session.query(Table1, Table2).join(Table2, Table1.table2_id==Table2.id).all()

使用relationship定义模型关系

class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(120), nullable=False)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
    user = db.relationship('User', backref='posts')

user = User.query.filter_by(username='john').first()
posts = user.posts  # 获取用户的所有帖子  posts是由backref='posts'决定的 

post = Post.query.filter_by(title='example').first()
author = post.user  # 获取帖子的作者

user = db.relationship('User', backref='posts') 是 SQL Alchemy 中定义模型之间关系的一种方式。这行代码表示在当前模型(假设是"Post"模型)中创建了一个名为 “user” 的关系字段,该字段可以用于访问该模型与 “User” 模型之间的关系。

backref='posts' 参数定义了反向引用,它会在 “User” 模型中创建一个名为 “posts” 的字段,通过该字段可以访问与该用户相关的所有帖子。

Flask-login

Flask-Login 可以进行登录、注册和注销登录。

首先,你需要安装 Flask-Login 扩展。可以使用以下命令来安装它:

pip install flask-login

对一个使用flask-login的应用最重要的一部分是login manager类。

login_manager = LoginManager()
login_manager.init_app(app)

它必须提供一个user_loader回调。

@login_manager.user_loader
def load_user(user_id):
    return User.get(user_id)

接受一个用户的ID作为参数,并且返回响应的用户对象。如果ID无效的话,他应该返回None。

参数user_loader标记的函数虽然在程序中没有显示调用,在用户登录时会自动获取,用于后续账号的管理

用户类

要简便的实现用户类,可以从UserMixin继承,他提供了对所有这些方法的默认实现。

user = UserMixin()
user.id = username
login_user(user) # 记录登录信息

你用来标识用户的类需要实现这些属性和方法:

四个方法:

is_authenticated()`、`is_active()`、`is_anonymous()`、`get_id()

  • is_authenticated() 当用户通过验证时,也即提供有效证明是返回true。
  • is_active() 可以直接返回true。
  • is_anonymous() 如果是匿名用户,返回true。真实用户返回False。
  • get_id() 返回一个能唯一识别用户的,并能用于user_loader回调中加载用户的Unicode ID。

需要用户登入的视图可以用login_required装饰器来装饰。

login_manager.login_view = 'login'  # 设置您的登录页面的路由名称

@app.route('/settings')
@login_required
def settings():
    pass

当用户需要登出时,使用logout_user方法。

@app.route('/logout')
@login_required
def logout():
    logout_user()
    return redirect(somewhere)

会话产生的任何cookie都会被清理干净。此时再访问@login_required标注的函数

接下来,以下是一个简单的示例代码,演示了如何使用 Flask-Login 进行用户登录、注册和注销登录的功能:

from flask import Flask, render_template, request, redirect, url_for
from flask_login import LoginManager, UserMixin, login_user, current_user, logout_user

app = Flask(__name__)
app.secret_key = 'secret_key'

login_manager = LoginManager()
login_manager.init_app(app)

# 模拟用户数据库
users = {'admin': {'password': 'admin123'}}

class User(UserMixin):
    pass

@login_manager.user_loader
def user_loader(username):
    if username not in users:
        return

    user = User()
    user.id = username
    return user

@app.route('/')
def index():
    return '欢迎访问首页'

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']

        if username in users and users[username]['password'] == password:
            user = User()
            user.id = username
            login_user(user)
            return redirect(url_for('index'))

        return '无效的用户名或密码'

    return render_template('login.html')

@app.route('/register', methods=['GET', 'POST'])
def register():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']

        if username in users:
            return '用户名已存在'

        users[username] = {'password': password}
        return '注册成功'

    return render_template('register.html')

@app.route('/logout')
def logout():
    logout_user()
    return redirect(url_for('index'))

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

这只是一个基本示例,你可以根据实际需求进行修改和扩展。你还需要创建相应的 HTML 模板,例如登录表单的模板 login.html 和注册表单的模板 register.html 。在模板中,你可以使用表单元素和相应的请求方法来获取用户输入的用户名和密码。

当用户成功登录后,会话将被存储在客户端,并且 Flask-Login 会为当前用户提供 current_user 对象,你可以在视图函数中使用它来判断用户是否已经登录。

在注销登录函数中,logout_user() 函数将会注销当前用户的登录信息。

记得在实际使用时,你需要将 your_secret_key 替换为一个随机的密钥字符串,用于保护用户会话。

页面实战总结

taskkill /F /PID 17824  #杀死进程ID  17824进程ID
netstat -ano | findstr :5000 查找对应端口号

创建数据表

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

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:000000@localhost/demo'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
# 设置为 True 时,Flask SQLAlchemy 会自动追踪对象的修改,并在需要时自动更新数据库。这种自动追踪功能在一些情况下可能会有性能问题,因为它需要通过比较对象状态来确定对象是否被修改。

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

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    password = db.Column(db.String(120), unique=False, nullable=False)
    display_name = db.Column(db.String(120), unique=True, nullable=False)

    def __repr__(self): # 用于查询对象显示
        return f'<User {self.username}>'

class Book(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(80), unique=True, nullable=False)
    price = db.Column(db.Integer, unique=False, nullable=False)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))

    def __repr__(self):
        return f'<Book {self.name}>'

migrate = Migrate(app, db)

记得迁移数据库

flask db init  flask db migrate  flask db upgrade

创建登录注册表单

将表单数据创建在forms.py文件中

from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired, Email, EqualTo, Length

class RegistrationForm(FlaskForm):
    username = StringField('Username', validators=[DataRequired(), Length(min=3, max=20)])
    display_name = StringField('display_name', validators=[DataRequired()])
    password = PasswordField('Password', validators=[DataRequired()])
    confirm_password = PasswordField('Confirm Password', validators=[DataRequired(), EqualTo('password')])

class LoginForm(FlaskForm):
    username = StringField('UserName', validators=[DataRequired()])
    password = PasswordField('Password', validators=[DataRequired()])
    # Email = StringField('Email', validators=[DataRequired(),Email()])


  • DataRequired():这是一个必需验证器,用于确保字段不能为空。如果输入为空,将显示一条错误消息。
  • Email():这是一个验证电子邮件格式的验证器。它检查输入是否符合电子邮件的格式规范。
  • Length(min=3, max=20):这是一个长度验证器,用于检查输入的字符数是否在指定的范围内。在这种情况下,字段的长度必须介于3和20之间。
  • EqualTo(‘password’):这是一个验证器,用于确保两个字段的值相等。在这种情况下,confirm_password字段的值必须与password字段的值相等。

创建登录注册视图

from flask import Flask, render_template, redirect, flash
from forms import RegistrationForm, LoginForm

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret-key'

@app.route('/register', methods=['GET', 'POST'])
def register():
    form = RegistrationForm()
    if form.validate_on_submit():
        # 在这里处理注册逻辑,比如保存用户信息到数据库
        flash('Account created successfully! You can now log in.', 'success')
        return redirect('/login')
    return render_template('register.html', form=form)

@app.route('/login', methods=['GET', 'POST'])
def login():
    form = LoginForm()
    if form.validate_on_submit():
        # 在这里处理登录逻辑,比如验证用户名和密码
        flash('Logged in successfully!', 'success')
        return redirect('/')
    return render_template('login.html', form=form)

@app.route('/logout')
def logout():
    return redirect(url_for('index'))

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

编写登录注册视图

from flask import Flask, render_template, redirect, flash, url_for
from flask_migrate import Migrate
from flask_sqlalchemy import SQLAlchemy

from forms import RegistrationForm, LoginForm

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret-key'
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:000000@localhost/demo'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db = SQLAlchemy()
db.init_app(app)

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    password = db.Column(db.String(120), unique=False, nullable=False)
    display_name = db.Column(db.String(120), unique=True, nullable=False)

    def __repr__(self):
        return f'<User {self.username}>'

class Book(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(80), unique=True, nullable=False)
    price = db.Column(db.Integer, unique=False, nullable=False)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))

    def __repr__(self):
        return f'<Book {self.name}>'

migrate = Migrate(app, db)

@app.route('/register', methods=['GET', 'POST'])
def register():
    form = RegistrationForm()
    if form.validate_on_submit():
        # 在这里处理注册逻辑,比如保存用户信息到数据库

        user = User(username=form.username.data, password=form.password.data, display_name=form.display_name.data)
        db.session.add(user)
        db.session.commit()

        return redirect('/login')
    return render_template('c_register.html', form=form)

@app.route('/login', methods=['GET', 'POST'])
def login():
    form = LoginForm()
    if form.validate_on_submit():
        # 查询数据库以验证用户名和密码
        username = form.username.data
        password = form.password.data
        print(User.query.filter_by(username=username))
        user = User.query.filter_by(username=username).first()
        if user and user.password == password:
            flash('Logged in successfully!', 'success')
            return redirect('/')
        # 在这里处理登录逻辑,比如验证用户名和密码
        # flash('Logged in successfully!', 'success')

    return render_template('c_login.html', form=form)

@app.route('/', methods=['GET', 'POST'])
def home():
    return '主页'

@app.route('/logout')
def logout():
    return redirect(url_for('login'))

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


创建模板

Login模板
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<h2>Login</h2>
<form method="POST" action="{{ url_for('login') }}">
{{ form.csrf_token }}
<div class="form-group">
  <label for="{{ form.username.id }}">{{ form.username.label }}</label>
  {{ form.username(class="form-control") }}
  {% for error in form.username.errors %}
    <span class="text-danger">{{ error }}</span>
  {% endfor %}
</div>
<div class="form-group">
  <label for="{{ form.password.id }}">{{ form.password.label }}</label>
  {{ form.password(class="form-control") }}
  {% for error in form.password.errors %}
    <span class="text-danger">{{ error }}</span>
  {% endfor %}
</div>
<input type="submit" value="Login">
</form>

</body>
</html>

Register模板

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
  <h2>Register</h2>
  <form method="POST" action="{{ url_for('register') }}">
    {{ form.csrf_token }}
    <div class="form-group">
      {{ form.username.label }} {{ form.username }}
      {% for error in form.username.errors %}
        <span class="text-danger">{{ error }}</span>
      {% endfor %}
    </div>
    <div class="form-group">
      {{ form.password.label }} {{ form.password }}
      {% for error in form.password.errors %}
        <span class="text-danger">{{ error }}</span>
      {% endfor %}
    </div>
      <div class="form-group">
      {{ form.confirm_password.label }} {{ form.confirm_password }}
      {% for error in form.confirm_password.errors %}
        <span class="text-danger">{{ error }}</span>
      {% endfor %}
    </div>
    <div class="form-group">
      {{ form.display_name.label }} {{ form.display_name }}
      {% for error in form.display_name.errors %}
        <span class="text-danger">{{ error }}</span>
      {% endfor %}
    </div>
    <input type="submit" value="Register">
  </form>
</body>
</html>

编写登录信息记录

from flask import Flask, render_template, redirect, flash, url_for
from flask_login import LoginManager, logout_user, login_required, UserMixin, login_user
from flask_migrate import Migrate
from flask_sqlalchemy import SQLAlchemy

from forms import RegistrationForm, LoginForm

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret-key'
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:000000@localhost/demo'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
login_manager = LoginManager()
login_manager.init_app(app)
db = SQLAlchemy()
db.init_app(app)
login_manager.login_view = 'login'

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    password = db.Column(db.String(120), unique=False, nullable=False)
    display_name = db.Column(db.String(120), unique=True, nullable=False)

    def __repr__(self):
        return f'<User {self.username}>'

class Book(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(80), unique=True, nullable=False)
    price = db.Column(db.Integer, unique=False, nullable=False)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))

    def __repr__(self):
        return f'<Book {self.name}>'

migrate = Migrate(app, db)

@login_manager.user_loader
def load_user(username):
    user = User.query.filter_by(username=username)
    if user:
        user_mix = UserMixin()
        user_mix.id = username
        return user_mix

@app.route('/register', methods=['GET', 'POST'])
def register():
    form = RegistrationForm()
    if form.validate_on_submit():
        user = User(username=form.username.data, password=form.password.data, display_name=form.display_name.data)
        db.session.add(user)
        db.session.commit()

        return redirect('/login')
    return render_template('c_register.html', form=form)

@app.route('/login', methods=['GET', 'POST'])
def login():
    form = LoginForm()
    if form.validate_on_submit():
        # 查询数据库以验证用户名和密码
        username = form.username.data
        password = form.password.data
        print(User.query.filter_by(username=username))
        user = User.query.filter_by(username=username).first()
        if user and user.password == password:
            user_mix = UserMixin()
            user_mix.id = username
            login_user(user_mix)

            flash('Logged in successfully!', 'success')
            return redirect('/')
        # 在这里处理登录逻辑,比如验证用户名和密码
        # flash('Logged in successfully!', 'success')

    return render_template('c_login.html', form=form)

@app.route('/', methods=['GET', 'POST'])
@login_required
def home():
    return '主页'

@app.route('/logout')
@login_required
def logout():
    logout_user()
    return redirect(url_for('login'))

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

主页数据显示

@app.route('/', methods=['GET', 'POST'])
@login_required
def home():
    user = User.query.filter_by(username=current_user.id).first()
    books = user.books
    Books = Book.query.filter_by(name='python').first()
    c_user = Books.user
    return render_template('index.html', books=books, c_user=c_user)

---------------------------END---------------------------

题外话

当下这个大数据时代不掌握一门编程语言怎么跟的上时代呢?当下最火的编程语言Python前景一片光明!如果你也想跟上时代提升自己那么请看一下.

在这里插入图片描述

感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。


👉优快云大礼包🎁:全网最全《Python学习资料》免费赠送🆓!(安全链接,放心点击)

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img
img

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!img

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

六、面试宝典

在这里插入图片描述

在这里插入图片描述

简历模板在这里插入图片描述

👉优快云大礼包🎁:全网最全《Python学习资料》免费赠送🆓!(安全链接,放心点击)

若有侵权,请联系删除

Python开发框架的进阶学习 Django的模型定义了数据库中的表结构。你可以使用models.py文件来定义模型,并使用migrate命令来创建数据库表。上述命令将生成数据库迁移文件并应用迁移,以创建Book表。 阅读详情

相关推荐

Python Flask框架 入门详解与进阶

Python Flask框架 入门详解与进阶

xiangfengl的专栏 1778

Flask框架的学习---01

绑定IP地址和端口:Flask run -h 127.0.0.1 -p 8080;开发模式:set FLASK_ENV=development。生产环境:set FLASK_ENV=production。

JEREMY的博客 3119

Python Flask框架学习汇编

if __name__ == '__main__':: 这是Python中一个常见的惯用法。当Python解释器读取一个Python文件时,它会将其中的全局变量__name__设置为__main__。app = Flask(__name__): 这行代码创建了一个Flask应用实例。在这里,__name__将会是__main__,因为这段代码是直接执行的,而不是被导入到其他模块中。from flask import Flask: 这行代码导入了Flask类,这是Flask框架的核心部分。

记录点滴 1526

flask使用数据库

flask使用数据库代码。 #coding=utf-8 from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) ip = '127.0.0.1' #设置连接数据库的URL app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymy...

北极冰1号 327

从Flask新手到专家的进阶之路

本书《Flask Web开发实战:入门、进阶与原理解析》为Python开发者提供了从基础到深入的完整Flask学习路径。书中不仅介绍了Flask的基础知识,还通过五个真实项目案例逐步提升开发者的实战能力,并深入剖析了Flask的源码和工作机制。本书适合所有Python程序员阅读,无论你是初学者还是希望提升技能的中级开发者。

weixin_42668301的博客 705

无人机航拍实战:如何用Python代码精准计算目标地理坐标(附完整代码)

本文详细介绍了如何利用Python代码实现无人机航拍图像中目标点的精准地理位置计算。通过解析从像素坐标系到WGS84大地坐标系的完整转换链条,结合相机内参、无人机姿态与地球曲率处理,提供了可直接运行的实战代码,并重点分析了地理位置计算中的常见误差来源与应对策略,助力开发者解决实际项目中的定位漂移问题。

hh234的博客 359

Flask SQLAlchemy数据类型

Flask SQLAlchemy数据类型

暖雪若峰的博客 1509

实验五 循环结构第1关:斐波那契数列第2关:统计一段英文语句中的单词数和句子数第3关:密码判断第4关:通过数列求自然常数e第5关:双倍余额递减法计算固定资产折旧第6关:销售统计第7关:投资年限计算

第1关:斐波那契数列第2关:统计一段英文语句中的单词数和句子数第3关:密码判断 第4关:通过数列求自然常数e 第5关:双倍余额递减法计算固定资产折旧

pro_daily的博客 8171

python和mysql数据类型对应_Flask SQLAlchemy 数据类型喝数据库的对应关系

类型名MySQL类型python类型描述SmallIntegersmallintint取值范围较小,一般为16位Integerintint普通整数,一般32位BigIntegerbigintint/long不限精度的整数Floatfloatfloat浮点数Numericdecimaldecimal.Decimal定点数Stringvarcharstr变长字符串Texttinytextstr变长字符...

weixin_29014237的博客 1428

IPSec案例部署

步骤二:按照规划划分vlan并开启vlanif接口,配置链路类型实现vlan之间的互通。步骤2 :配置OSPF实现公司内部通信,配置静态路由实现AR1和AR3路由可达。3. 配置IPSec的安全联盟(协商业务数据加密时使用的参数)下发缺省路由,使网关设备有去往对端的路由‘配置对等体IP地址,即分公司的出口IP。步骤1:设备重命名以及IP地址的配置。步骤4:配置NAT,实现内网访问外网。步骤3:配置IPSec VPN。5.调用IPSec的安全策略。发了5个包 加密5个包。

2301_76769137的博客 1694

基于JavaEE的银行大客户关系维护系统(JSP+java+springmvc+mysql+MyBatis)

基于JavaEE技术的大型银行客户关系管理系统可以实现客户信息的集中管理、客户需求的分析与挖掘、个性化的服务推荐等功能。+ Maven +mysql5.7或8.0+html+css+js等等组成,B/S模式 + Maven管理等等。用户发送请求:用户通过浏览器或其他客户端向系统发送请求,请求访问特定的页面或执行特定的操作。前端展示结果:前端接收到后端返回的数据,根据需要进行展示。数据返回给前端:后端程序处理完业务逻辑后,将结果数据返回给前端。后端程序接收到请求后,根据请求的类型和参数进行相应的处理。

gp1052的博客 720

python boolean_Flask SQLAlchemy SQLITE boolean字段始终返回Fals

同一代码不能在OSX上用Python 2.7.10、SQLAlchemy==1.0.9和Flask-SQLAlchemy==2.1、Flask==0.10.1复制:#!/usr/bin/env python# encoding: utf-8from flask import Flaskfrom flask_sqlalchemy import SQLAlchemyapp = Flask(__name...

weixin_36173545的博客 465

【Zephyr电源与功耗专题】13_PMU电源驱动介绍

本文介绍的PMU芯片包含2路DCDC和6路LDO,在Zephyr实时操作系统下实现了完整的电源管理解决方案。

zero的博客 845

Python 之 Flask框架(进阶版)

FlASK是一个轻量级的WSGI Web应用程序框架,Flask的核心包括Werkzeug工具箱和Jinja2模板引擎,它没有默认使用的数据库或窗体验证工具,这意味着用户可以根据自己的需求选择不同的数据库和验证工具。Flask的设计理念是保持核心简单,同时提供强大的扩展性,用户可以通过添加各种扩展来增加功能,如邮件发送、用户认证、数据库集成等pip升级命令:python -m pip install --upgrade pipFlask要求Python的版本在3.4以上。本文讲解flask框架进阶用法

masterphp的博客 1093

Linux安装Docker(图文解说详细版)

第一步,下载docker 下载地址: https://download.docker.com/linux/static/stable/x86_64/ 这次的演示我们使用docker-18.06.3-ce.tgz 这个版本 第二步,上传到云服务器上面 使用rz命令上传或者fltp工具进行上传 第三步,解压文件 第四步,将解压出来的docker文件复制到 /usr/bin/ 目录下 这么做的目的是将docker交给linux自己去管理,类似spring中的ioc(猜测,非正经知识) cp docker

编码人生 1万+

DCNv4+YOLOv8:2024最新可变形卷积赋能目标检测,从原理到实战的科研级优化指南

从理解DCNv4“自适应变形卷积核”的核心思想,到亲手将其嵌入YOLOv8并验证在复杂场景的检测效果,再到基于此探索属于自己的科研与工程方向——这个过程能让你深刻理解目标检测中“特征自适应提取”的核心价值。现在就开始行动,相信你会在目标检测的“自适应特征提取”之路上,走出一条属于自己的技术路径。实验通常会证明:嵌入DCNv4后,YOLOv8在复杂场景下的检测精度提升3-5个百分点,尤其是小目标和遮挡目标的AP提升更为明显,而推理速度仅下降5%-10%(可通过模型量化进一步优化)。2024年最新推出的。

m0_64661770的博客 269

Python进阶:框架Flask 与 Django的对比分析

Flask和Django都是优秀的Python Web开发框架,它们各自具有独特的优势和适用场景。Flask以其轻量级、灵活性和可扩展性著称,适合小型项目和快速原型开发。Django则以其全面性、安全性和高效开发著称,适合大型和复杂的Web应用程序。选择建议在选择框架时,应根据项目的具体需求、团队的技术栈以及个人的偏好进行综合考虑。如果追求灵活性、希望构建一个轻量级或高度自定义的应用,Flask是一个理想的选择。

vangoghlaam的博客 1486

具身智能 | 从具身智能出发谈多传感器融合技术

多传感器融合感知是具身智能系统突破“感知—认知—行动”闭环的核心使能技术。本文从具身智能的视角出发,对多传感器融合技术进行系统综述。首先阐述了具身智能对多传感器融合提出的独特需求,包括异构感知集成、跨模态语义对齐和实时闭环决策。其次,构建了多层级融合技术分类框架,从数据层融合、特征层融合、决策层融合、时序融合到多模态大语言模型(MLLM)融合,逐层梳理主流方法与演进脉络。在此基础上,分析了面向具身智能的通用融合架构设计,涵盖了感知—推理—执行三层架构及其关键组件。

尘世冰封的专栏 315

Python入门自学进阶-Web框架——42、Web框架了解-bottle、flask

我们可以将这个wsgi_app换成我们自定义的类,在__call__方法中添加我们自己的代码,最后在调用原来的wsgi_app,这样就在请求处理前,先经过了我们自己的处理,像Django的中间件就是这种机制实现的。TEMPLATE_PATH = ['./', './views/'],即默认模板查找顺序是先在项目根目录,然后是views目录,我们可以添加自己定义的目录。放置在session中,使用flash(value),取用,get_flashed_message(),取完就删除了。

kaoa000的专栏——非淡泊无以明志,非宁静无以致远 972

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

python flask快速入门与进阶视频_【进阶】2016年最新PythonWeb框架Flask入门视频教程 25课时...

4.3Flask入门.jpg (23.57 KB, 下载次数: 0)2016-10-17 17:43 上传课程介绍:Flask是一个使用 Python 编写的轻量级 Web 应用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 。Flask使用 BSD 授权。本视频教程将从基础入手,全面地了解 Flask 的能力将你引领进入“微”框架世界,并通过实践向你展示 Fla...

weixin_39724362的博客 216

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Python轻量级Web框架Flask(10)——Flask进阶知识(caching插件和Flask自带的钩子函数)

Flask插件可以去官网查看,有很多。插件安装流程:1、通过pip指令在对应环境中下载插件2、在项目的exts.py文件中初始化3、使用这个插件是一个和缓存相关的插件,缓存经常用来保留那些经常被访问的临时数据。

sz1125218970的博客 1567

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Python项目进阶:Flask框架下MySQL数据库的增删改查API开发

使用SQLAlchemy定义数据库模型。这里以User模型为例,包含ID、姓名和邮箱字段,实现数据持久化。id = db.Column(db.Integer, primary_key=True) # 主键IDname = db.Column(db.String(100), nullable=False) # 姓名,非空email = db.Column(db.String(100), unique=True, nullable=False) # 邮箱,唯一且非空return {

aaisjhsgxksgdj的博客 333

python flask框架详解

Flask是一个Python编写的Web 微框架,让我们可以使用Python语言快速实现一个网站或Web服务。本文参考自Flask官方文档, 英文不好的同学也可以参考中文文档 1.安装flask pip install flask 2.简单上手 一个最小的 Flask 应用如下: from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello World' if __na

shifengboy的博客 8万+

吐血推荐珍藏的Flask资源

题图:Photo by Pathum Danthanarayana on UnsplashFlask 是 Python 中最流行的 Web 框架之一,以小巧、灵活、可扩展...

Python之禅 1万+

如何用python做后端写网页-flask框架

如何以python做后端写网页-flask框架什么是Flask安装flask模块Hello World更深一步:数据绑定如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 什么是Flask Flask是一个使用 Python 编写的轻量级 Web 应用框架。其 WSGI 工具

Littleflowers的博客 2万+

Python中Web开发-Flask框架

大家好,在当今数字化的世界中,Web 应用程序已经成为人们日常生活和商业活动中不可或缺的一部分。为了满足用户需求,开发人员需要选择适合他们项目需求的工具和技术。Python Flask 就是这样一款灵活而强大的工具,它能够帮助开发人员快速构建轻量级的 Web 应用程序。本文将介绍 Python Flask 的基本概念、特点以及如何使用它来开发 Web 应用程序。希望能给大家带来一些帮助。

若不知道要驶向哪个码头,那么任何风都不会是顺风。 2014
上一篇: Python 函数--详细整理
下一篇: Python音乐平台Django实战(—)
Python_P叔
博客等级 码龄3年 5454粉丝 827原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值