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=['