Flask 账号管理列表

Flask 账号管理列表

web/controllers/account/Account.py    /index

route_account = Blueprint( 'account_page',__name__ )

@route_account.route( "/index" )
def index():
    resp_data = {}
    req = request.values
    page = int( req['p'] ) if ( 'p' in req and req['p'] ) else 1
    query = User.query

    if 'mix_kw' in req:
        rule = or_( User.nickname.ilike( "%{0}%".format( req['mix_kw'] ) ),User.mobile.ilike( "%{0}%".format( req['mix_kw'] ) ) )
        query = query.filter( rule )

    if 'status' in req and int( req['status'] ) > -1:
        query = query.filter( User.status == int( req['status'] ) )

    page_params = {
        'total': query.count(),
        'page_size':app.config['PAGE_SIZE'],{% extends "common/layout_main.html" %}
{% block content %}
{% include "common/tab_account.html" %}
{% if list %} {% for item in list %} {% endfor %} {% else %} {% endif %}
序号 姓名 手机 邮箱 操作
{{ item.uid }} {{ item.nickname }} {{ item.mobile }} {{ item.email }} {% if item.status == 1 %} {% else %} {% endif %}
暂无数据~~
{% include 'common/pagenation.html' %}
{% endblock %} {% block js %} {% endblock %} 'page': page, 'display':app.config['PAGE_DISPLAY'], 'url': request.full_path.replace( "&p={}".format(page),"" ) } pages = iPagination( page_params ) offset = ( page - 1 ) * app.config['PAGE_SIZE'] limit = app.config['PAGE_SIZE'] * page list = query.order_by( User.uid.desc() ).all()[ offset:limit ] resp_data['list'] = list resp_data['pages'] = pages resp_data['search_con'] = req resp_data['status_mapping'] = app.config['STATUS_MAPPING'] return ops_render( "account/index.html",resp_data )

这段代码是一个Flask应用的路由部分,主要用于处理用户请求并返回相应的响应。下面是对代码的详细介绍:

请注意:

User表中的nickname字段包含req[‘mix_kw’]变量的值(即模糊匹配)。

User表中的mobile字段包含req[‘mix_kw’]变量的值(即模糊匹配)这段代码只是构建了查询条件,并没有实际执行查询操作。要执行查询操作,还需要使用SQLAlchemy提供的其他方法。

这段代码使用了ilike函数来进行模糊匹配,其中"%{0}%"是一个占位符,表示在查询中的任意位置都可以匹配req[‘mix_kw’]的值。

问题1:mix_kw 是一个怎样的值?如何让该值存在?

引用中的代码是一个SQLAlchemy的查询条件,用于在数据库中查找用户昵称  或  手机号码中包含特定关键字的用户。具体来说,这段代码使用了ilike函数来进行模糊匹配or_函数用于将两个条件进行逻辑或运算

引用中的代码定义了一个文本输入框,该输入框的名称为mix_kw占位符为"请输入姓名或者手机号码",样式为"class=form-control",初始值为空。

mix_kw是一个变量,它的值可以根据具体的需求进行设置。在这段代码中,mix_kw的值是通过用户输入的方式获取的。用户可以在文本输入框中输入姓名或手机号码,然后提交表单,服务器端可以通过获取表单数据的方式获取到mix_kw的值。

要让mix_kw的值存在,需要 在 前端页面中提供一个表单,并且在提交表单时将输入框中的值发送到服务器端。服务器端可以通过  获取表单数据的方式  获取到mix_kw的值,并进行相应的处理。

如下图为web/templates/account/index.html的部分代码

  

问题2: ...  是什么标签?

是HTML中的一个标签,它用于表示斜体文本。在给定的代码中,标签用于在搜索按钮中插入一个图标

问题2.1: 中class ="fa fa-search"是什么意思?

class ="fa fa-search"是一个CSS类,用于指定一个元素的样式。在这个例子中,它被用于一个按钮元素,用于显示一个搜索图标。"fa fa-search"是Font Awesome图标库中搜索图标的类名。Font Awesome是一个流行的图标库,提供了各种各样的图标,可以通过添加相应的类名来使用这些图标。

问题3: ilike是怎样的一个函数?

ilike是SQLAlchemy中的一个函数,用于:

在数据库查询中进行模糊匹配。它类似于SQL中的LIKE 操作符 ,但是不区分大小写。

简单案例:

@app.route('/users/', methods=['GET'])
def search_users(keyword):
    users = User.query.filter(User.name.ilike(f'%{keyword}%')).all()
    result = [{'id': user.id, 'name': user.name} for user in users]
    return jsonify(result)

在上述案例中,我们定义了一个名为User的模型类,它具有id和name两个属性。然后,我们在路由/users/中使用ilike方法进行模糊查询,根据 关键字 在name字段中进行匹配。最后,将查询结果以JSON格式返回给客户端。

在给定的代码中,f'%%'是Python中的 字符串格式化SQL通配符 的使用。

  1. f是Python 3.6及以上版本引入的一种字符串格式化方式,称为f-string。它允许在字符串中插入  变量 或 表达式 的值。在给定的代码中,f'%{keyword}%'使用了f-string来将变量keyword的值插入到字符串中,形成一个模糊匹配的SQL查询条件。

  2. '%%'是SQL中的通配符,表示  匹配任意字符。在给定的代码中,'%{keyword}%'中的两个百分号%分别表示SQL通配符的 起始 和 结束 位置,用于模糊匹配查询条件。

综上所述,给定的代码users = User.query.filter(User.name.ilike(f'%{keyword}%')).all()是一个使用f-string和SQL通配符进行 模糊匹配查询 的示例。

问题4: %{0}% 代表什么意思?

"%{0}%"是一个占位符,表示:

在查询中的 任意位置 都可以匹配req[‘mix_kw’]的值。

其中,{0}表示: 占位符 的索引,可以根据需要进行更改。

这样的 占位符 可以在字符串中的任何位置使用,以匹配查询中的任意字符

问题5: 请简单说明一下什么是.format 并且如何使用?

在Flask中,.format是一个字符串格式化方法,用于将变量的值插入到字符串中的占位符位置。它是一种方便的方式来构建动态的字符串。

使用.format的基本语法是在字符串中使用  占位符{},然后通过调用.format方法并传入相应的值来替换这些占位符

下面是一个示例,演示了如何在Flask中使用.format

name = "Alice"
age = 25

message = "My name is {} and I am {} years old.".format(name, age)
print(message)  # 输出:My name is Alice and I am 25 years old.

在上面的示例中,我们定义了两个变量nameage,然后使用.format方法将它们的值插入到字符串"My name is {} and I am {} years old."中的占位符位置。

你也可以在占位符中指定格式,例如:

pi = 3.14159

message = "The value of pi is {:.2f}".format(pi)
print(message)  # 输出:The value of pi is 3.14

在上面的示例中,我们使用{:.2f}作为占位符,表示将浮点数pi格式化为保留两位小数的形式。

总结一下,.format是Flask中用于字符串格式化的方法,它可以 方便地  将变量的值 插入到 字符串中的占位符位置。

  1. 首先,通过Blueprint函数创建了一个名为account_page的蓝图对象,并指定了蓝图的名称为__name__

  2. 使用@route_account.route("/index")装饰器将index函数绑定到/index路由上,即当用户访问/index时,会执行index函数。

  3. index函数中,首先定义了一个空字典resp_data,用于存储响应数据。

  4. 通过request.values获取用户请求中的参数,并将其赋值给req变量。

  5. 判断请求参数中是否包含p,如果包含则将其转换为整数类型并赋值给page变量,否则默认为1

  6. rule = or_( User.nickname.ilike( "%{0}%".format( req['mix_kw'] ) ),User.mobile.ilike( "%{0}%".format( req['mix_kw'] ) ) ) 请解析一下该段代码

    这段代码是使用SQLAlchemy库中的or_函数来构建一个查询条件。该查询条件用于在数据库中查找满足以下两个条件之一的记录。

  7. 创建了一个User查询对象query,用于查询数据库中的用户数据。

  8. 如果请求参数中包含mix_kw,则创建一个查询规则rule,该规则用于模糊匹配用户昵称  或  手机号中包含mix_kw的用户。mix_kw是一个参数,用于搜索用户。它是通过查询字符串传递给路由的。该参数用于在用户昵称和手机号中进行模糊搜索。如果mix_kw存在并且不为空,则会创建一个规则,该规则会在 用户昵称  和  手机号 中进行模糊匹配。然后,根据该规则过滤查询结果。最后,将过滤后的结果返回给前端页面进行展示。

  9. 根据查询规则对查询对象进行过滤。

  10. 如果请求参数中包含status且其值大于-1,则对查询对象进行进一步过滤,只查询状态为status的用户。

  11. 创建一个分页参数字典page_params,包含总记录数、每页显示数量、当前页码、显示页码数量和当前URL等信息。

调用iPagination函数生成分页对象pages

创建一个page_params字典,包含分页相关的参数,如总记录数、每页显示数量、当前页码、显示页码数量和当前页面的URL。

调用iPagination函数,根据page_params字典生成分页对象pages

根据当前页码和每页显示数量计算出偏移量offset和限制数量limit

根据分页参数计算偏移量和限制数量,从查询结果中获取相应的用户数据。

将用户数据、分页对象、请求参数和状态映射等信息存储到resp_data字典中。

使用query.order_by(User.uid.desc())对查询结果按照User.uid字段降序排序。

使用切片操作[offset:limit]获取分页后的用户数据列表。

将用户数据列表、分页对象、请求参数和状态映射字典添加到resp_data字典中。

最后,调用ops_render函数,将resp_data字典传递给模板文件account/index.html进行渲染,并返回渲染后的结果。

问题6: 请解释一下offset 偏移量?

offset是用来确定查询结果的起始位置的变量。它通过计算(page - 1) * app.config['PAGE_SIZE']得到。其中:

page表示  当前页数,

app.config['PAGE_SIZE']表示  每页显示的数据条数。

offset的作用是  根据当前页数和每页显示的数据条数,计算出查询结果的起始位置。通过将offset应用到查询语句中的[offset:limit]可以实现分页查询,即每次只查询一页的数据

例如,如果page为1,app.config['PAGE_SIZE']为10,则offset为0,表示从查询结果的第一条数据开始;如果page为2,app.config['PAGE_SIZE']为10,则offset为10,表示从查询结果的第11条数据开始。

问题7: User.uid.desc()中desc()是什么方法?

desc()是SQLAlchemy中的一个方法,用于指定查询结果的排序方式。在上述代码中,query.order_by(User.uid.desc())表示按照User表中的uid字段进行降序排序。降序排序是指将结果按照从大到小的顺序排列。

comon/models/log/AppAccessLog.py

web/templates/account/index.html

{% extends "common/layout_main.html" %}
{% block content %}
{% include "common/tab_account.html" %}
{% if list %} {% for item in list %} {% endfor %} {% else %} {% endif %}
序号 姓名 手机 邮箱 操作
{{ item.uid }} {{ item.nickname }} {{ item.mobile }} {{ item.email }} {% if item.status == 1 %} {% else %} {% endif %}
暂无数据~~
{% include 'common/pagenation.html' %}
{% endblock %} {% block js %} {% endblock %}

这段代码是一个基于Flask框架的网页模板,用于展示一个账户列表页面。下面是对代码的介绍:

全局 CSS 样式 · Bootstrap v3 中文文档 | Bootstrap 中文网

栅格系统用于通过一系列的行(row)与列(column)的组合来创建页面布局,你的内容就可以放入这些创建好的布局中。

  1. :这两行代码定义了一个带有边框底部的行。

问题0:
中col-lg-12是什么?请解释:

这两行代码定义了一个  占据整行的列

是一个HTML代码片段,它使用了 Bootstrap栅栏系统 的CSS类。这个代码片段的含义是  将一个元素的 宽度设置 为 占据 整个父容器的 12个栅栏列,即占据整行的宽度。
Bootstrap栅栏系统中,col-xs-col-sm-col-md-col-lg- 是用来定义  元素在 不同屏幕尺寸下 的 宽度 的CSS类。其中,* 代表一个数字,表示 元素在对应屏幕尺寸下占据的栅栏列数
col-xs-*:适用于超小屏幕设备(小于768px宽度)。    Extra Small
col-sm-*:适用于小屏幕设备(大于等于768px宽度)。 Small        
col-md-*:适用于中等屏幕设备(大于等于992px宽度)。 Middle
col-lg-*:适用于大屏幕设备(大于等于1200px宽度)。       Large




{% if tmp_key == search_con['status'] %} selected {% endif %}:如果tmp_key的值等于search_con['status']的值,则添加selected属性,表示该选项被选中。
 


问题1::是怎么形成导航条的?

组件 · Bootstrap v3 中文文档 | Bootstrap 中文网 胶囊式标签页

这两行代码定义了一个导航菜单。

Flask 账号管理列表_第1张图片


问题2: 如何在html中设置一个内联表单?

是一个HTML表单元素,其中包含了两个class属性:form-inlinewrap_search

form-inline是Bootstrap框架中的一个CSS类,用于创建一个内联表单,即表单元素在同一行显示。它会将表单元素的宽度设置为自适应,并且表单元素之间没有间隔。

wrap_search是自定义的CSS类,可能是为了给表单元素添加额外的样式或功能而创建的。根据提供的引用内容,无法确定wrap_search类的具体作用,可能需要查看更多的代码或文档才能确定其含义。

总结起来,表示一个内联表单,并且可能包含了自定义的样式或功能。

问题3:请详细解释一下 row m-t p-w-m什么意思?

因此,p-w-m可以理解为设置了元素的内边距和宽度,并且具有外边距。

  • row:表示一个行容器,用于包含列(column)元素。
  • m-t:表示上边距(margin-top),用于设置行的顶部外边距。
  • p-w-m:表示内边距(padding),用于设置行的内边距。
  • row m-t p-w-m是一个CSS类名,用于定义一个带有上边距和内边距的行。其中,p-w-m是一个自定义的类名,用于设置内边距。

    在这个自定义类名中,wm分别代表了不同的含义:

  • w表示width,用于设置元素的宽度。
  • m表示margin,用于设置元素的外边距。

综合起来,

定义了一个带有上边距和内边距的行容器。

:这两行代码定义了一个表单组。

全局 CSS 样式 · Bootstrap v3 中文文档 | Bootstrap 中文网   form-group 表单

Flask 账号管理列表_第2张图片

组件 · Bootstrap v3 中文文档 | Bootstrap 中文网  input-group 输入框组

问题4:请详细解说一下

这段代码是HTML代码,其中包含了一段用于创建下拉选择框(select)的代码。下拉选择框是一种常见的用户界面元素,用于让用户从预定义的选项中选择一个值。

在这段代码中,:这行代码定义了一个文本输入框。

form-control是Bootstrap框架中的一个CSS类,用于设置表单元素的样式。它可以应用于input、select、textarea等表单元素,使其具有统一的外观和样式

form-control类主要有以下作用:

  1. 设置表单元素的宽度为100%。
  2. 设置表单元素的边框样式。
  3. 设置表单元素的内边距和外边距。
  4. 设置表单元素的字体样式和颜色。
  5. 设置表单元素的背景颜色和边框颜色。

通过使用form-control类,可以使表单元素 在不同设备上 都具有一致的外观和样式提高用户体验和界面一致性。

  1. :这行代码定义了一个隐藏的输入框。

  2. :这两行代码定义了一个输入框组的按钮。

问题7: 按钮如何设置不同的展示样式?

:这两行代码定义了一个按钮。


问题7.1: 该代码中search有什么作用?

        根据提供的引用内容,search是一个类名,用于给按钮添加样式或者标识。在这个例子中,search类名被添加到了