网站开发Flask框架之ajax实现增删改查实例

本文介绍了Flask框架的基础和特点,并详细阐述了Ajax技术及其开发模式。通过结合MVC架构,展示了如何在Flask中运用Ajax进行网页的增删改查操作。文中提供了一个实例,包括代码分析和实现,尽管前端页面引用自他人,但对理解Ajax在Flask中的应用有所帮助。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Flask的简介及基本模式

Flask是一个使用 Python 编写的轻量级 Web 应用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 。Flask的基本模式为在程序里将一个视图函数分配给一个URL,每当用户访问这个URL时,系统就会执行给该URL分配好的视图函数,获取函数的返回值并将其显示到浏览器上。

Flask的特点

一、后续的基于机器学习的车辆检测与属性识别算法研究,主要开发语言也是应用Python,整个系统统一开发语言,便于开发和后期维护。
二、Flask因为灵活、轻便且高效的特点被业界认可,同时拥有基于Werkzeug、Jinja2等一些开源库,拥有内置服务器和单元测试,适配RESTful,支持安全的cookies,而且官方文档完整,便于学习掌握。
三、Flask中拥有灵活的Jinja2模板引擎,提高了前端代码的复用率。这样可以提高开发效率和有利于后期开发与维护。
以上,是Flask越来越受欢迎的原因。

ajax的简介

ajax是指一种创建交互式网页应用的网页开发技术,等同于 异步 JavaScript 和 XML 或者是 HTML,主要用于创建快速动态网页, 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。由于这一点,ajax逐渐成为主流。

ajax的开发模式

综合各种变化的技术和强耦合的客户服务端环境,Ajax 提出了一种新的开发方式。Ajax 开发人员必须理解传统的 MVC 架构,这限制了应用层次之间的边界。同时,开发人员还需要考虑 B/S 环境的外部和使用 Ajax 技术来重定型 MVC 边界。最重要的是,Ajax 开发人员必须禁止以页面集合的方式来考虑 Web 应用而需要将其认为是单个页面。一旦 UI 设计与服务架构之间的范围被严格区分开来后,开发人员就需要更新和变化的技术集合了。

MVC介绍

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。
MVC开始是存在于桌面程序中的,M是指业务模型,V是指用户界面,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。比如一批统计数据可以分别用柱状图、饼图来表示。C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新。

实例介绍

1.做一个网页,可以进行数据的增删改查的为佳
2.用pycharm工具建flask框架
3.按照MVC标准进行ajax前后端分离的代码
4.运行实现

代码分析

因为是MVC模式,所以有个dao包,有个controller包,有个service包,然后因为有些类需要重复使用,所以有个封装类的文件,在entity包里,pycharm中Flask框架生成的app文件,动态前端页面存在templates包中,静态前端页面和css、js、img等在static包中,由于引入了其他人的页面格式,将其也放在了static包中。

代码实现(我的前端页面出了点问题,所以用的别人的,只做参考)

各文件的位置
在这里插入图片描述
init文件无实意,static中由于导入了他人的界面格式太多,就不展开了,主要是存放css、js、img、静态页面的,记得后面要引入的所在的具体位置就行。
app.py:(启动文件及配置的所在)

from flask import Flask, render_template,session
import config
from config_class import *
from datetime import timedelta
from controller.usercontroller import usercontroller


app = Flask(__name__)
app.config['DEBUG'] = True
app.config['SECRET_KEY'] = 'AAAGGGGCCFDDDFFFDDDD'
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(minutes=30)  #设置session的保存时间。

# 是使用config py文件定义配置
app.config.from_object(config)
# 是使用class定义配置
app.config.from_object(DebugConfig)

app.register_blueprint(usercontroller)   # 声明

@app.route('/')  # URL路由
def index():
    print(session.get('user'))
    return render_template('index.html')

if __name__ == '__main__':
    app.run(host=app.config['SERVER_ADDR'], port=app.config['SERVER_PORT'], debug=True)

config.py:(可以在app.py中做配置,就不需要这个文件了)

'''
自定义配置文件
'''
DEBUG = True
SECRET_KEY = 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
PAGE_SIZE = 10

SERVER_ADDR = '10.0.14.204'
SERVER_PORT = 80

usercontroller.py(创建.do事件,控制模型与页面视图一一对应)

from flask import Blueprint,render_template,request,session,Response
import hashlib
from service.userservice import UserService
from entity.user import User
import json

usercontroller = Blueprint('usercontroller', __name__)
userService = UserService()


@usercontroller.route("/gologin.do", methods=['POST', 'GET'])
def gologin():
    return render_template('login.html')

@usercontroller.route("/login.do", methods=['POST', 'GET'])
def login():
    userName = request.form.get('username')  # 表单提交的数据使用request.form[]
    userPwd = request.form.get('userpwd')
    print("login.do:",userName)
    result = userService.findUserByUserName(userName)
    print("login.do:",result)
    if result and  result[0][2] == userPwd:
        session['user'] = userName
        print(hashlib.md5('123456'.encode(encoding='utf-8')).hexdigest())
        # 登录成功,则保存Cookies信息
        resp = Response(render_template('index.html', messasge='登录成功'))
        resp.set_cookie('userName', userName, max_age=7*24*3600)
        resp.set_cookie('userPwd', userPwd, max_age=7*24*3600)
        return resp
        pass
    elif not result or  result[0][2] != userPwd:
        return render_template('login.html', message='用户名或密码错误')
        pass
    return render_template('login.html')
    pass

@usercontroller.route('/logout.do', methods=['POST', 'GET'])
def logout():
    session.clear()
    print('==========', session.get('user'))
    resp = Response(render_template('index.html'))
    resp.delete_cookie('userName')
    resp.delete_cookie('userPwd')
    return resp
    pass

@usercontroller.route('/goregist.do')
def goRegist():
    return render_template('regist.html')
    pass

@usercontroller.route('/regist.do', methods=['POST', 'GET'])
def regist():
    userName = request.form.get('userName')  # 表单提交的数据使用request.form[]
    userPwd = request.form.get('userPwd')

    user = User()
    user.userName = userName
    user.userPwd = userPwd

    result = userService.createUser(user)

    if result > 0:
        return render_template('login.html', message='注册成功')
        pass
    else:
        return render_template('regist.html', message='注册失败')
        pass
    pass

# 查询用户,并且显示
@usercontroller.route('/gouserinfo.do', methods=['POST', 'GET'])
def goUserInfo():
    userName = request.form.get('userName')
    userSex = request.form.get('userSex')
    user = User()
    user.userName = userName
    user.userSex = userSex
    userList = userService.findUserList(user)
    return render_template('systeminfo/userinfo.html', userList = userList, user=user)
    pass

# 删除用户,并且显示
@usercontroller.route('/removeruser.do', methods=['POST', 'GET'])
def goRemoveUser():
    userId = request.args.get('userId')
    userName = request.form.get('userName')
    userSex = request.form.get('userSex')
    user = User()
    user.userName = userName
    user.userSex = userSex
    result = userService.removeUser(userId)
    userList = userService.findUserList(user)
    return render_template('systeminfo/userinfo.html', userList = userList, message='删除成功' if result >0 else '删除失败')
    pass

@usercontroller.route('/gomodifyuser.do', methods=['
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值