Flask 账号管理列表

本文围绕Flask账号管理列表展开,详细解析了代码中的诸多问题。涉及SQLAlchemy模糊匹配、字符串格式化、HTML标签与样式、分页设置等内容,还介绍了Font Awesome字体引用配置,为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" %}
<div class="row">
    <div class="col-lg-12">
        <form class="form-inline wrap_search">
            <div class="row m-t p-w-m">
                <div class="form-group">
                    <select name="status" class="form-control inline">
                        <option value="-1">请选择状态</option>
                        {% for tmp_key in status_mapping %}
                        <option value="{
  
  { tmp_key }}" {% if tmp_key == search_con['status']  %} selected {% endif %}>{
  
  {  status_mapping[ tmp_key ] }}</option>
                        {% endfor %}
                    </select>
                </div>

                <div class="form-group">
                    <div class="input-group">
                        <input type="text" name="mix_kw" placeholder="请输入姓名或者手机号码" class="form-control" value="{
  
  { search_con['mix_kw'] }}">
                        <input type="hidden" name="p" value="{
  
  { search_con['p'] }}">
                        <span class="input-group-btn">
                            <button type="button" class="btn btn-primary search">
                                <i class="fa fa-search"></i>搜索
                            </button>
                        </span>
                    </div>
                </div>
            </div>
            <hr>
            <div class="row">
                <div class="col-lg-12">
                    <a class="btn btn-w-m btn-outline btn-primary pull-right"
                       href="{
  
  { buildUrl('/account/set') }}">
                        <i class="fa fa-plus"></i>账号
                    </a>
                </div>
            </div>
        </form>
        <table class="table table-bordered m-t">
            <thead>
            <tr>
                <th>序号</th>
                <th>姓名</th>
                <th>手机</th>
                <th>邮箱</th>
                <th>操作</th>
            </tr>
            </thead>
            <tbody>
            {% if list %}
                {% for item in list %}
            <tr>
                <td>{
  
  { item.uid  }}</td>
                <td>{
  
  { item.nickname }}</td>
                <td>{
  
  { item.mobile  }}</td>
                <td>{
  
  { item.email  }}</td>
                <td>
                    <a href="{
  
  { buildUrl('/account/info' ) }}?id={
  
  { item.uid  }}">
                        <i class="fa fa-eye fa-lg"></i>
                    </a>

                    {%  if item.status == 1 %}
                    <a class="m-l" href="{
  
  { buildUrl('/account/set') }}?id={
  
  { item.uid  }}">
                        <i class="fa fa-edit fa-lg"></i>
                    </a>

                    <a class="m-l remove" href="javascript:void(0);" data="{
  
  { item.uid  }}">
                        <i class="fa fa-trash fa-lg"></i>
                    </a>
                    {% else %}
                       <a class="m-l recover" href="javascript:void(0);" data="{
  
  { item.uid  }}">
                        <i class="fa fa-rotate-left fa-lg"></i>
                    </a>
                    {% endif %}
                </td>
            </tr>
                {% endfor %}
            {% else %}
                <tr><td colspan="5">暂无数据~~</td></tr>
            {% endif %}
            </tbody>
        </table>
        <!--分页代码已被封装到统一模板文件中-->
        {% include 'common/pagenation.html' %}
    </div>
</div>
{% endblock %}
{% block js %}
<script src="{
  
  { buildStaticUrl('/js/account/index.js') }}"></script>
{% 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的部分代码

  <div class="form-group">
                    <div class="input-group">
                        <input type="text" name="mix_kw" placeholder="请输入姓名或者手机号码" class="form-control" value="">
                        <input type="hidden" name="p" value="1">
                        <span class="input-group-btn">
                            <button type="button" class="btn btn-primary search">
                                <i class="fa fa-search"></i>搜索
                            </button>
                        </span>
                    </div>
                </div>
            </div>

问题2: <i>...</i>  是什么标签?

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

问题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/<keyword>', 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/<keyword>中使用ilike方法进行模糊查询,根据 关键字 在name字段中进行匹配。最后,将查询结果以JSON格式返回给客户端。

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

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

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

<
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

xinzheng新政

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

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

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

打赏作者

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

抵扣说明:

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

余额充值