用python和flask框架写MongoDB数据库网页(通院大三软件设计)运营商信息管理系统(4)修改成依赖于mongodb(增删改查) *** 作的网页

用python和flask框架写MongoDB数据库网页(通院大三软件设计)运营商信息管理系统(4)修改成依赖于mongodb(增删改查) *** 作的网页,第1张

希望你已经看完了这个视频并自己动手做过一遍了。

​​​​​​web版学生信息后台管理系统(Python+flask框架+Bootstrap5)期末毕设必备_哔哩哔哩_bilibili

如果没有,我诚挚的建议你去看完再回来。

由于我做的时候没有留基础版,所以代码都是进阶版,但是进阶主要都在外观上,所以对功能没什么影响,应该也不影响理解,因为大多都是模板。除了我做的“高级功能聚合查找”。后面会讲到。

接下来我会把增删改查部分的函数如何改用mongodb *** 作完成讲掉,至于更高级的功能改进(比如登录验证之类的)我比较懒的去讲,我会直接发代码,也懒得再水几篇了。看不懂就自己学,学不会可以评论区答疑。

后端出现的主要函数说明:(可以先不看)

函数名

功能

render_template

渲染网页

redirect

对网页重定向,跳转至另一个网页

flask的POSTGET方法

分别向网页传参收参

collection.count_documents

调用了mongo的数据库函数,清点数据库中符合条件的数据个数

collection.find_one

调用了mongo的数据库函数,查找符合条件的一条数据

前端出现的主要函数说明:(可以先不看)

函数名或控制字段

功能

class

控制内容类

           page-header

作为标题

text-center

内容居中

text-primary

内容呈现蓝色

style

控制风格

margin

控制边缘

<h1>

最大字号标题

style="background-image:

控制背景图片

background-size: cover;

背景图片大小:覆盖全网页

alt

若图片无法正常加载则显示其他内容

class="form-floating"

启用浮动标签

style="width:400px;

控制宽度

placeholder

占位符,服务于浮动标签

button

控制按钮

href

超链接跳转至

1、Admin界面 2管理员登陆界面

前端代码:

@app.route('/admin')

def admin():

    # 重新传一遍数据库

    users = collection.find({}, {'_id': 0})

    return render_template('admin.html', users=users)

函数名

功能

collection.find({}, {'_id': 0})

调用了mongo的数据库函数,传回数据库全部数据,删去_id字段

后端代码




    
    
    
        运营商信息管理系统
    
    
    管理员登录
    




    

        

            新增用户信息
            查找
        

    




    {#需要将python的对象数据显示到浏览器上,模板语法
    比较出名的是jinjia2
    #}

    {# 从数组中取出数据,slice切片,for循环 #}
    {#  用法{{ users }} #}
    {% for user in users %}
        
    {% endfor %}

    
电话号码 姓名 密码 身份z号 是否管理员 ¥话费余额 ¥本期应付 ¥月基本费 ¥套餐外费用 套餐含语音通话/min 套餐含流量/GB 语音通话总时长/min 流量已使用/GB 是否开通VPN 超出语音/min 超出流量/GB
{{ user.phone }} {{ user.name }} {{ user.password }} {{ user.IDnum }} {{ user.ADMIN }} {{ user.balance }} {{ user.payable }} {{ user.basic_fee }} {{ user.extra_fee }} {{ user.basic_call }} {{ user.basic_traffic }} {{ user.total_call }} {{ user.total_traffic }} {{ user.VPN_service }} {{ user.extra_call }} {{ user.extra_traffic }} { user.phone }}">删除 { user.phone }}">修改

首次出现的主要函数或控制字段说明:

函数名

功能

<tbody>

绘制表格

<tr>

表格内容开始

<th>

表格内容

href="/change?phone={{ user.phone }}"

高级 *** 作:用?借用网址路由传参,参数限制为字符串或整型

网页效果如图:

我不清楚你们直接这样能不能运行,因为增删改查还没写。。。可以先不急着运行。

2.1增 (其实我在运行admin之前先用增传了一些数据进去,方法就是先按下面那个doc格式写好,如何 collection.insert_one(doc)进去),写好增之后你也可以啦,写进去的都能在studio3t里看到,也可直接在studiost里改。
@app.route('/add', methods=['GET', 'POST'])
def add():
    # 复制框架源码
    if request.method == 'POST':
        phone = request.form.get('phone')
        name = request.form.get('name')
        password = request.form.get('password')
        IDnum = request.form.get('IDnum')
        ADMIN = request.form.get('ADMIN')
        balance = request.form.get('balance')
        payable = request.form.get('payable')
        basic_fee = request.form.get('basic_fee')
        extra_fee = request.form.get('extra_fee')
        basic_call = request.form.get('basic_call')
        basic_traffic = request.form.get('basic_traffic')
        total_call = request.form.get('total_call')
        total_traffic = request.form.get('total_traffic')
        VPN_service = request.form.get('VPN_service')
        extra_call = request.form.get('extra_call')
        extra_traffic = request.form.get('extra_traffic')
        print('获取的用户信息:', phone, name, password,
              IDnum, ADMIN, balance, payable, basic_fee, extra_fee,
              basic_call, basic_traffic, total_call,
              total_traffic, VPN_service, extra_call, extra_traffic)
        doc = {'phone': phone, 'name': name, 'password': password,
               'IDnum': IDnum, 'ADMIN': ADMIN, 'balance': balance,
               'payable': payable, 'basic_fee': basic_fee,
               'extra_fee': extra_fee, 'basic_call': basic_call,
               'basic_traffic': basic_traffic,
               'total_call': total_call, 'total_traffic': total_traffic,
               'VPN_service': VPN_service, 'extra_call': extra_call,
               'extra_traffic': extra_traffic}
        collection.insert_one(doc)
        return redirect('./admin')
    return render_template('add.html')

首次出现的主要函数或控制字段说明:

函数名

功能

request.form.get

获取从前端传回的数据的一个字段

collection.insert_one

monogodb数据库 *** 作,添加一条数据

网页效果如图:

2.2删

后端代码:

@app.route('/delete')
def delete_user():
    # 在后台需要拿到用户的名字
    print(request.method)
    phonenum = request.args.get('phone')
    # 再传一遍数据库
    users = collection.find({}, {'_id': 0})
    # 找到用户并删除
    for user in users:
        if user['phone'] == phonenum:
            # 要在数据库里删除user
            collection.delete_one({'phone': phonenum})
               return redirect('./admin')

首次出现的主要函数或控制字段说明:

函数名

功能

request.args.get

获取从前端传回的数据一个结论的一个字段

collection.delete_one

monogodb数据库 *** 作,删除一条数据

网页效果:点击删除按钮后,管理员页面上立即消失这一条数据。

2.3改

后端

@app.route('/change', methods=["GET", "POST"])
def change_user():
    phone = request.args.get('phone')
    if request.method == 'POST':
        phone = request.form.get('phone')
        name = request.form.get('name')
        password = request.form.get('password')
        IDnum = request.form.get('IDnum')
        ADMIN = request.form.get('ADMIN')
        balance = request.form.get('balance')
        payable = request.form.get('payable')
        basic_fee = request.form.get('basic_fee')
        extra_fee = request.form.get('extra_fee')
        basic_call = request.form.get('basic_call')
        basic_traffic = request.form.get('basic_traffic')
        total_call = request.form.get('total_call')
        total_traffic = request.form.get('total_traffic')
        VPN_service = request.form.get('VPN_service')
        extra_call = request.form.get('extra_call')
        extra_traffic = request.form.get('extra_traffic')
        # user = collection.find({}, {'_id': 0})这个好像没用到?
        # 加一个update
        collection.update_one(
            {'phone': phone},  # 筛选出指定数据
            {'$set': {
                'phone': phone, 'name': name, 'password': password,
                'IDnum': IDnum, 'ADMIN': ADMIN, 'balance': balance,
                'payable': payable, 'basic_fee': basic_fee,
                'extra_fee': extra_fee, 'basic_call': basic_call,
                'basic_traffic': basic_traffic,
                'total_call': total_call, 'total_traffic': total_traffic,
                'VPN_service': VPN_service, 'extra_call': extra_call,
                'extra_traffic': extra_traffic
                # $set:对当前字典满足筛选器的项进行修改,如果键名不存在则创建键值对
            }
            })
        return redirect('./admin')
    users = collection.find({}, {'_id': 0})
    for user in users:
        if user['phone'] == phone:
            # 需要在页面中渲染用户的数据
            return render_template('change.html', user=user)

前端:




    
    修改
    {# 导入框架的css #}
    


{# #} 分钟 GB 分钟 GB 分钟 GB
2.4 查

这里有一个聚合查找,就是姓名手机号身份z号三个选一个搜索就可以出结果。可以自己看一看,其实不难。

@app.route('/search', methods=['GET', 'POST'])
def search():
    user = {}
    if request.method == 'POST':
        # request可以拿到前端浏览器传回的数据
        mix = request.form.get('mix')
        print(mix)
        # name = request.form.get('name')
        # IDnum = request.form.get('IDnum')

        c1 = collection.count_documents({'phone': mix})
        c2 = collection.count_documents({'name': mix})
        c3 = collection.count_documents({'IDnum': mix})
        count = c1 + c2 + c3
        # 先查询返回的值是否存在
        # print(phone, password, count)
        if count == 0:
            # 想return到一个提示错误的网页
            return redirect('./search_name_error')
        else:
            # 跳转到一个查找结果页面search_result,类似admin
            # 要传出一个键值对,到底之前给了哪个
            condition = {}
            if c1 == 1:
                condition = {'phone': mix}
            elif c2 == 1:
                condition = {'name': mix}
            else:
                condition = {'IDnum': mix}
            print(condition)
            user = collection.find_one(condition)
            # return render_template('search.html', user=user)
    return render_template('search.html', user=user)

前端




    
    查找
    


返回 {# #} {# 你可以根据手机号、姓名、身份z号中的任意一项进行查询#} {# #}
新增用户信息 查找 {#需要将python的对象数据显示到浏览器上,模板语法 比较出名的是jinjia2 #} {# 从数组中取出数据,slice切片,for循环 #} {# 用法{{ users }} #} {# {% for user in users %}#} {# {% endfor %}#}
电话号码 姓名 密码 身份z号 是否管理员 ¥话费余额 ¥本期应付 ¥月基本费 ¥套餐外费用 套餐含语音通话/min 套餐含流量/GB 语音通话总时长/min 流量已使用/GB 是否开通VPN 超出语音/min 超出流量/GB
{{ user.phone }} {{ user.name }} {{ user.password }} {{ user.IDnum }} {{ user.ADMIN }} {{ user.balance }} {{ user.payable }} {{ user.basic_fee }} {{ user.extra_fee }} {{ user.basic_call }} {{ user.basic_traffic }} {{ user.total_call }} {{ user.total_traffic }} {{ user.VPN_service }} {{ user.extra_call }} {{ user.extra_traffic }} { user.phone }}">删除 { user.phone }}">修改

这样就结束了。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/916760.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存