åºäºPython Flaskæ¡æ¶+jquery Ajaxææ¯å®ç°çå¢å æ¹æ¥ï¼CRUDï¼+ Ajaxç弿¥æä»¶ä¸ä¼ ï¼å°æä»¶ä¸ä¼ æ¾å¨ä¸èµ·ï¼
ç»éçé¢ï¼
注åçé¢ï¼
主çé¢ï¼
ç¨æ·ç®¡ççé¢ï¼
ä¿®æ¹çé¢ï¼
代ç å®ç°ï¼
app.pyè¿è¡æä»¶ï¼
from flask import Flask, render_template,session
import config
from config_class import *
from datetime import timedelta
from filter.sessionfilter import sessionfilter
from controller.usercontroller import usercontroller
from controller.deptcontroller import deptcontroller
app = Flask(__name__)
#1.ç´æ¥å®ä¹config
app.config['DEBUG'] = True
app.config['SECRET_KEY'] = 'AAAGGGGCCFDDDFFFDDDD'
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(minutes=30) #设置sessionçä¿åæ¶é´ã
#2.使ç¨config pyæä»¶å®ä¹é
ç½®
app.config.from_object(config)
#3.使ç¨classå®ä¹é
ç½®
app.config.from_object(DebugConfig)
app.register_blueprint(sessionfilter) # 声æ
app.register_blueprint(usercontroller) # 声æ
app.register_blueprint(deptcontroller)
@app.route('/') # URLè·¯ç±
def index():
print(session.get('user'))
return render_template('index.html')
@app.route('/main') # URLè·¯ç±
def main():
return render_template('main.html')
pass
if __name__ == '__main__':
app.run(host=app.config['SERVER_ADDR'], port=app.config['SERVER_PORT'], debug=True)
top.htmlï¼
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>æºè½è使°æ®åæå¹³å°</title>
<!-- Tell the browser to be responsive to screen width -->
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
<!-- Bootstrap 3.3.7 -->
<link rel="stylesheet" href="{{ url_for('static',filename='bootstrap/dist/css/bootstrap.min.css') }}">
<!-- Font Awesome -->
<link rel="stylesheet" href="{{ url_for('static',filename='font-awesome/css/font-awesome.min.css') }}">
<!-- Ionicons -->
<link rel="stylesheet" href="{{ url_for('static',filename='Ionicons/css/ionicons.min.css') }}">
<!-- Theme style -->
<link rel="stylesheet" href="{{ url_for('static',filename='css/AdminLTE.min.css') }}">
<!-- AdminLTE Skins. Choose a skin from the css/skins
folder instead of downloading all of them to reduce the load. -->
<link rel="stylesheet" href="{{ url_for('static',filename='css/skins/_all-skins.min.css') }}">
<!-- Morris chart -->
<link rel="stylesheet" href="{{ url_for('static',filename='morris.js/morris.css') }}">
<!-- jvectormap -->
<link rel="stylesheet" href="{{ url_for('static',filename='jvectormap/jquery-jvectormap.css') }}">
<!-- Date Picker -->
<link rel="stylesheet" href="{{ url_for('static',filename='bootstrap-datepicker/dist/css/bootstrap-datepicker.min.css') }}">
<!-- Daterange picker -->
<link rel="stylesheet" href="{{ url_for('static',filename='bootstrap-daterangepicker/daterangepicker.css') }}">
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<body class="hold-transition skin-blue sidebar-mini">
<div class="wrapper">
<header class="main-header">
<!-- Logo -->
<a href="/main" class="logo">
<!-- mini logo for sidebar mini 50x50 pixels -->
<span class="logo-mini"><b>Job
</b>Hutter</span>
<!-- logo for regular state and mobile devices -->
<span class="logo-lg"><b>è使°æ®åæ</b>å¹³å°</span>
</a>
<!-- Header Navbar: style can be found in header.less -->
<nav class="navbar navbar-static-top">
<!-- Sidebar toggle button-->
<a href="#" class="sidebar-toggle" data-toggle="push-menu" role="button">
<span class="sr-only">Toggle navigation</span>
</a>
<div class="navbar-custom-menu">
<ul class="nav navbar-nav">
<!-- Messages: style can be found in dropdown.less-->
<li class="dropdown messages-menu">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
<i class="fa fa-envelope-o"></i>
<span class="label label-success">4</span>
</a>
<ul class="dropdown-menu">
<li class="header">You have 4 messages</li>
<li>
<!-- inner menu: contains the actual data -->
<ul class="menu">
<li><!-- start message -->
<a href="#">
<div class="pull-left">
<img src="dist/img/user2-160x160.jpg" class="img-circle" alt="User Image">
</div>
<h4>
Support Team
<small><i class="fa fa-clock-o"></i> 5 mins</small>
</h4>
<p>Why not buy a new awesome theme?</p>
</a>
</li>
<!-- end message -->
<li>
<a href="#">
<div class="pull-left">
<img src="dist/img/user3-128x128.jpg" class="img-circle" alt="User Image">
</div>
<h4>
AdminLTE Design Team
<small><i class="fa fa-clock-o"></i> 2 hours</small>
</h4>
<p>Why not buy a new awesome theme?</p>
</a>
</li>
<li>
<a href="#">
<div class="pull-left">
<img src="dist/img/user4-128x128.jpg" class="img-circle" alt="User Image">
</div>
<h4>
Developers
<small><i class="fa fa-clock-o"></i> Today</small>
</h4>
<p>Why not buy a new awesome theme?</p>
</a>
</li>
<li>
<a href="#">
<div class="pull-left">
<img src="dist/img/user3-128x128.jpg" class="img-circle" alt="User Image">
</div>
<h4>
Sales Department
<small><i class="fa fa-clock-o"></i> Yesterday</small>
</h4>
<p>Why not buy a new awesome theme?</p>
</a>
</li>
<li>
<a href="#">
<div class="pull-left">
<img src="dist/img/user4-128x128.jpg" class="img-circle" alt="User Image">
</div>
<h4>
Reviewers
<small><i class="fa fa-clock-o"></i> 2 days</small>
</h4>
<p>Why not buy a new awesome theme?</p>
</a>
</li>
</ul>
</li>
<li class="footer"><a href="#">See All Messages</a></li>
</ul>
</li>
<!-- Notifications: style can be found in dropdown.less -->
<li class="dropdown notifications-menu">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
<i class="fa fa-bell-o"></i>
<span class="label label-warning">10</span>
</a>
<ul class="dropdown-menu">
<li class="header">You have 10 notifications</li>
<li>
<!-- inner menu: contains the actual data -->
<ul class="menu">
<li>
<a href="#">
<i class="fa fa-users text-aqua"></i> 5 new members joined today
</a>
</li>
<li>
<a href="#">
<i class="fa fa-warning text-yellow"></i> Very long description here that may not fit into the
page and may cause design problems
</a>
</li>
<li>
<a href="#">
<i class="fa fa-users text-red"></i> 5 new members joined
</a>
</li>
<li>
<a href="#">
<i class="fa fa-shopping-cart text-green"></i> 25 sales made
</a>
</li>
<li>
<a href="#">
<i class="fa fa-user text-red"></i> You changed your username
</a>
</li>
</ul>
</li>
<li class="footer"><a href="#">View all</a></li>
</ul>
</li>
<!-- Tasks: style can be found in dropdown.less -->
<li class="dropdown tasks-menu">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
<i class="fa fa-flag-o"></i>
<span class="label label-danger">9</span>
</a>
<ul class="dropdown-menu">
<li class="header">You have 9 tasks</li>
<li>
<!-- inner menu: contains the actual data -->
<ul class="menu">
<li><!-- Task item -->
<a href="#">
<h3>
Design some buttons
<small class="pull-right">20%</small>
</h3>
<div class="progress xs">
<div class="progress-bar progress-bar-aqua" style="width: 20%" role="progressbar"
aria-valuenow="20" aria-valuemin="0" aria-valuemax="100">
<span class="sr-only">20% Complete</span>
</div>
</div>
</a>
</li>
<!-- end task item -->
<li><!-- Task item -->
<a href="#">
<h3>
Create a nice theme
<small class="pull-right">40%</small>
</h3>
<div class="progress xs">
<div class="progress-bar progress-bar-green" style="width: 40%" role="progressbar"
aria-valuenow="20" aria-valuemin="0" aria-valuemax="100">
<span class="sr-only">40% Complete</span>
</div>
</div>
</a>
</li>
<!-- end task item -->
<li><!-- Task item -->
<a href="#">
<h3>
Some task I need to do
<small class="pull-right">60%</small>
</h3>
<div class="progress xs">
<div class="progress-bar progress-bar-red" style="width: 60%" role="progressbar"
aria-valuenow="20" aria-valuemin="0" aria-valuemax="100">
<span class="sr-only">60% Complete</span>
</div>
</div>
</a>
</li>
<!-- end task item -->
<li><!-- Task item -->
<a href="#">
<h3>
Make beautiful transitions
<small class="pull-right">80%</small>
</h3>
<div class="progress xs">
<div class="progress-bar progress-bar-yellow" style="width: 80%" role="progressbar"
aria-valuenow="20" aria-valuemin="0" aria-valuemax="100">
<span class="sr-only">80% Complete</span>
</div>
</div>
</a>
</li>
<!-- end task item -->
</ul>
</li>
<li class="footer">
<a href="#">View all tasks</a>
</li>
</ul>
</li>
<!-- User Account: style can be found in dropdown.less -->
<li class="dropdown user user-menu">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
<img src="{{ session.get('user').get('userPic') }}" class="user-image" alt="User Image">
<span class="hidden-xs">{{ session.get('user').get('userName')}}</span>
</a>
<ul class="dropdown-menu">
<!-- User image -->
<li class="user-header">
<img src="{{ session.get('user').get('userPic') }}" class="img-circle" alt="User Image">
<p>
{{ session.get('user').get('userName') }}
<small></small>
</p>
</li>
<!-- Menu Body -->
<li class="user-body">
<div class="row">
<div class="col-xs-4 text-center">
<a href="#">Followers</a>
</div>
<div class="col-xs-4 text-center">
<a href="#">Sales</a>
</div>
<div class="col-xs-4 text-center">
<a href="#">Friends</a>
</div>
</div>
<!-- /.row -->
</li>
<!-- Menu Footer-->
<li class="user-footer">
<div class="pull-left">
<a href="#" class="btn btn-default btn-flat">个人信æ¯</a>
</div>
<div class="pull-right">
<a href="/logout.do" class="btn btn-default btn-flat">éåº</a>
</div>
</li>
</ul>
</li>
<!-- Control Sidebar Toggle Button -->
<li>
<a href="#" data-toggle="control-sidebar"><i class="fa fa-gears"></i></a>
</li>
</ul>
</div>
</nav>
</header>
left.htmlï¼
<!-- Left side column. contains the logo and sidebar -->
<aside class="main-sidebar">
<!-- sidebar: style can be found in sidebar.less -->
<section class="sidebar">
<!-- sidebar menu: : style can be found in sidebar.less -->
<ul class="sidebar-menu" data-widget="tree">
<li class="header">导èªèå</li>
<li class="active treeview">
<a href="#">
<i class="fa fa-dashboard"></i> <span>æ°æ®åæç®¡ç</span>
<span class="pull-right-container">
<i class="fa fa-angle-left pull-right"></i>
</span>
</a>
<ul class="treeview-menu">
<li class="active"><a href="index.html"><i class="fa fa-circle-o"></i> èä½åææ¥è¡¨</a></li>
<li><a href="index2.html"><i class="fa fa-circle-o"></i> è¡ä¸åææ¥è¡¨</a></li>
</ul>
</li>
<li class="treeview">
<a href="#">
<i class="fa fa-files-o"></i>
<span>è使°æ®éé</span>
<span class="pull-right-container">
<span class="label label-primary pull-right">4</span>
</span>
</a>
<ul class="treeview-menu">
<li><a href="#"><i class="fa fa-circle-o"></i> ééä»»å¡ç®¡ç</a></li>
<li><a href="#"><i class="fa fa-circle-o"></i> èä½ä¿¡æ¯ç®¡ç</a></li>
<li><a href="#"><i class="fa fa-circle-o"></i> ååä¿¡æ¯ç®¡ç</a></li>
<li><a href="#"><i class="fa fa-circle-o"></i> Collapsed Sidebar</a></li>
</ul>
</li>
<li class="treeview">
<a href="#">
<i class="fa fa-pie-chart"></i>
<span>ç³»ç»åè½ç®¡ç</span>
<span class="pull-right-container">
<i class="fa fa-angle-left pull-right"></i>
</span>
</a>
<ul class="treeview-menu">
<li><a href="/goajaxuserinfo.do"><i class="fa fa-circle-o"></i> ç¨æ·ç®¡ç</a></li>
<li><a href="pages/charts/morris.html"><i class="fa fa-circle-o"></i> Morris</a></li>
<li><a href="pages/charts/flot.html"><i class="fa fa-circle-o"></i> Flot</a></li>
<li><a href="pages/charts/inline.html"><i class="fa fa-circle-o"></i> Inline charts</a></li>
</ul>
</li>
<li class="treeview">
<a href="#">
<i class="fa fa-laptop"></i>
<span>UI Elements</span>
<span class="pull-right-container">
<i class="fa fa-angle-left pull-right"></i>
</span>
</a>
<ul class="treeview-menu">
<li><a href="pages/UI/general.html"><i class="fa fa-circle-o"></i> General</a></li>
<li><a href="pages/UI/icons.html"><i class="fa fa-circle-o"></i> Icons</a></li>
<li><a href="pages/UI/buttons.html"><i class="fa fa-circle-o"></i> Buttons</a></li>
<li><a href="pages/UI/sliders.html"><i class="fa fa-circle-o"></i> Sliders</a></li>
<li><a href="pages/UI/timeline.html"><i class="fa fa-circle-o"></i> Timeline</a></li>
<li><a href="pages/UI/modals.html"><i class="fa fa-circle-o"></i> Modals</a></li>
</ul>
</li>
<li class="treeview">
<a href="#">
<i class="fa fa-edit"></i> <span>Forms</span>
<span class="pull-right-container">
<i class="fa fa-angle-left pull-right"></i>
</span>
</a>
<ul class="treeview-menu">
<li><a href="pages/forms/general.html"><i class="fa fa-circle-o"></i> General Elements</a></li>
<li><a href="pages/forms/advanced.html"><i class="fa fa-circle-o"></i> Advanced Elements</a></li>
<li><a href="pages/forms/editors.html"><i class="fa fa-circle-o"></i> Editors</a></li>
</ul>
</li>
<li class="treeview">
<a href="#">
<i class="fa fa-table"></i> <span>Tables</span>
<span class="pull-right-container">
<i class="fa fa-angle-left pull-right"></i>
</span>
</a>
<ul class="treeview-menu">
<li><a href="pages/tables/simple.html"><i class="fa fa-circle-o"></i> Simple tables</a></li>
<li><a href="pages/tables/data.html"><i class="fa fa-circle-o"></i> Data tables</a></li>
</ul>
</li>
<li>
<a href="pages/calendar.html">
<i class="fa fa-calendar"></i> <span>Calendar</span>
<span class="pull-right-container">
<small class="label pull-right bg-red">3</small>
<small class="label pull-right bg-blue">17</small>
</span>
</a>
</li>
<li>
<a href="pages/mailbox/mailbox.html">
<i class="fa fa-envelope"></i> <span>Mailbox</span>
<span class="pull-right-container">
<small class="label pull-right bg-yellow">12</small>
<small class="label pull-right bg-green">16</small>
<small class="label pull-right bg-red">5</small>
</span>
</a>
</li>
<li class="treeview">
<a href="#">
<i class="fa fa-folder"></i> <span>Examples</span>
<span class="pull-right-container">
<i class="fa fa-angle-left pull-right"></i>
</span>
</a>
<ul class="treeview-menu">
<li><a href="pages/examples/invoice.html"><i class="fa fa-circle-o"></i> Invoice</a></li>
<li><a href="pages/examples/profile.html"><i class="fa fa-circle-o"></i> Profile</a></li>
<li><a href="pages/examples/login.html"><i class="fa fa-circle-o"></i> Login</a></li>
<li><a href="pages/examples/register.html"><i class="fa fa-circle-o"></i> Register</a></li>
<li><a href="pages/examples/lockscreen.html"><i class="fa fa-circle-o"></i> Lockscreen</a></li>
<li><a href="pages/examples/404.html"><i class="fa fa-circle-o"></i> 404 Error</a></li>
<li><a href="pages/examples/500.html"><i class="fa fa-circle-o"></i> 500 Error</a></li>
<li><a href="pages/examples/blank.html"><i class="fa fa-circle-o"></i> Blank Page</a></li>
<li><a href="pages/examples/pace.html"><i class="fa fa-circle-o"></i> Pace Page</a></li>
</ul>
</li>
<li class="treeview">
<a href="#">
<i class="fa fa-share"></i> <span>Multilevel</span>
<span class="pull-right-container">
<i class="fa fa-angle-left pull-right"></i>
</span>
</a>
<ul class="treeview-menu">
<li><a href="#"><i class="fa fa-circle-o"></i> Level One</a></li>
<li class="treeview">
<a href="#"><i class="fa fa-circle-o"></i> Level One
<span class="pull-right-container">
<i class="fa fa-angle-left pull-right"></i>
</span>
</a>
<ul class="treeview-menu">
<li><a href="#"><i class="fa fa-circle-o"></i> Level Two</a></li>
<li class="treeview">
<a href="#"><i class="fa fa-circle-o"></i> Level Two
<span class="pull-right-container">
<i class="fa fa-angle-left pull-right"></i>
</span>
</a>
<ul class="treeview-menu">
<li><a href="#"><i class="fa fa-circle-o"></i> Level Three</a></li>
<li><a href="#"><i class="fa fa-circle-o"></i> Level Three</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#"><i class="fa fa-circle-o"></i> Level One</a></li>
</ul>
</li>
<li><a href="https://adminlte.io/docs"><i class="fa fa-book"></i> <span>Documentation</span></a></li>
<li class="header">LABELS</li>
<li><a href="#"><i class="fa fa-circle-o text-red"></i> <span>Important</span></a></li>
<li><a href="#"><i class="fa fa-circle-o text-yellow"></i> <span>Warning</span></a></li>
<li><a href="#"><i class="fa fa-circle-o text-aqua"></i> <span>Information</span></a></li>
</ul>
</section>
<!-- /.sidebar -->
</aside>
main.htmlï¼
{% include 'top.html' %}
{% include 'left.html' %}
<!-- Content Wrapper. Contains page content -->
<div class="content-wrapper">
<!-- Content Header (Page header) -->
<section class="content-header">
<h1>
èä½åå¸
<small>ITè¡ä¸ä¹ååæ</small>
</h1>
<ol class="breadcrumb">
<li><a href="#"><i class="fa fa-dashboard"></i> èä½åå¸</a></li>
<li class="active">è使»è§</li>
</ol>
</section>
<!-- Main content -->
<section class="content">
<!-- Small boxes (Stat box) -->
<!-- Main row -->
<div class="row">
<!-- Left col -->
<section class="col-lg-7 connectedSortable">
<!-- Custom tabs (Charts with tabs)-->
<div class="nav-tabs-custom">
<!-- Tabs within a box -->
<ul class="nav nav-tabs pull-right">
<li class="active"><a href="#revenue-chart" data-toggle="tab">Javaè¯è¨</a></li>
<li><a href="#sales-chart" data-toggle="tab">Pythonè¯è¨</a></li>
<li class="pull-left header"><i class="fa fa-inbox"></i> èä½åå¸</li>
</ul>
<div class="tab-content no-padding">
<!-- Morris chart - Sales -->
<div class="chart tab-pane active" id="java-chart" style="position: relative; height: 300px;"></div>
<div class="chart tab-pane" id="python-chart" style="position: relative; height: 300px;"></div>
</div>
</div>
<!-- /.nav-tabs-custom -->
<!-- Chat box -->
<div class="box box-success">
<div class="box-header">
<i class="fa fa-comments-o"></i>
<h3 class="box-title">å¼åè¯è¨èªèµå¯¹æ¯å¾</h3>
<div class="box-tools pull-right" data-toggle="tooltip" title="Status">
<div class="btn-group" data-toggle="btn-toggle">
<button type="button" class="btn btn-default btn-sm active"><i class="fa fa-square text-green"></i>
</button>
<button type="button" class="btn btn-default btn-sm"><i class="fa fa-square text-red"></i></button>
</div>
</div>
</div>
<div class="box-body chat">
<div id="salary-box" style="height: 250px; width: 100%;"></div>
</div>
<!-- /.chat -->
</div>
<!-- /.box (chat box) -->
<!-- TO DO List -->
<div class="box box-primary">
<div class="box-header">
<i class="ion ion-clipboard"></i>
<h3 class="box-title">To Do List</h3>
<div class="box-tools pull-right">
<ul class="pagination pagination-sm inline">
<li><a href="#">«</a></li>
<li><a href="#">1</a></li>
<li><a href="#">2</a></li>
<li><a href="#">3</a></li>
<li><a href="#">»</a></li>
</ul>
</div>
</div>
<!-- /.box-header -->
<div class="box-body">
<!-- See dist/js/pages/dashboard.js to activate the todoList plugin -->
<ul class="todo-list">
<li>
<!-- drag handle -->
<span class="handle">
<i class="fa fa-ellipsis-v"></i>
<i class="fa fa-ellipsis-v"></i>
</span>
<!-- checkbox -->
<input type="checkbox" value="">
<!-- todo text -->
<span class="text">Design a nice theme</span>
<!-- Emphasis label -->
<small class="label label-danger"><i class="fa fa-clock-o"></i> 2 mins</small>
<!-- General tools such as edit or delete-->
<div class="tools">
<i class="fa fa-edit"></i>
<i class="fa fa-trash-o"></i>
</div>
</li>
<li>
<span class="handle">
<i class="fa fa-ellipsis-v"></i>
<i class="fa fa-ellipsis-v"></i>
</span>
<input type="checkbox" value="">
<span class="text">Make the theme responsive</span>
<small class="label label-info"><i class="fa fa-clock-o"></i> 4 hours</small>
<div class="tools">
<i class="fa fa-edit"></i>
<i class="fa fa-trash-o"></i>
</div>
</li>
<li>
<span class="handle">
<i class="fa fa-ellipsis-v"></i>
<i class="fa fa-ellipsis-v"></i>
</span>
<input type="checkbox" value="">
<span class="text">Let theme shine like a star</span>
<small class="label label-warning"><i class="fa fa-clock-o"></i> 1 day</small>
<div class="tools">
<i class="fa fa-edit"></i>
<i class="fa fa-trash-o"></i>
</div>
</li>
<li>
<span class="handle">
<i class="fa fa-ellipsis-v"></i>
<i class="fa fa-ellipsis-v"></i>
</span>
<input type="checkbox" value="">
<span class="text">Let theme shine like a star</span>
<small class="label label-success"><i class="fa fa-clock-o"></i> 3 days</small>
<div class="tools">
<i class="fa fa-edit"></i>
<i class="fa fa-trash-o"></i>
</div>
</li>
<li>
<span class="handle">
<i class="fa fa-ellipsis-v"></i>
<i class="fa fa-ellipsis-v"></i>
</span>
<input type="checkbox" value="">
<span class="text">Check your messages and notifications</span>
<small class="label label-primary"><i class="fa fa-clock-o"></i> 1 week</small>
<div class="tools">
<i class="fa fa-edit"></i>
<i class="fa fa-trash-o"></i>
</div>
</li>
<li>
<span class="handle">
<i class="fa fa-ellipsis-v"></i>
<i class="fa fa-ellipsis-v"></i>
</span>
<input type="checkbox" value="">
<span class="text">Let theme shine like a star</span>
<small class="label label-default"><i class="fa fa-clock-o"></i> 1 month</small>
<div class="tools">
<i class="fa fa-edit"></i>
<i class="fa fa-trash-o"></i>
</div>
</li>
</ul>
</div>
<!-- /.box-body -->
<div class="box-footer clearfix no-border">
<button type="button" class="btn btn-default pull-right"><i class="fa fa-plus"></i> Add item</button>
</div>
</div>
<!-- /.box -->
<!-- quick email widget -->
<div class="box box-info">
<div class="box-header">
<i class="fa fa-envelope"></i>
<h3 class="box-title">Quick Email</h3>
<!-- tools box -->
<div class="pull-right box-tools">
<button type="button" class="btn btn-info btn-sm" data-widget="remove" data-toggle="tooltip"
title="Remove">
<i class="fa fa-times"></i></button>
</div>
<!-- /. tools -->
</div>
<div class="box-body">
<form action="#" method="post">
<div class="form-group">
<input type="email" class="form-control" name="emailto" placeholder="Email to:">
</div>
<div class="form-group">
<input type="text" class="form-control" name="subject" placeholder="Subject">
</div>
<div>
<textarea class="textarea" placeholder="Message"
style="width: 100%; height: 125px; font-size: 14px; line-height: 18px; border: 1px solid #dddddd; padding: 10px;"></textarea>
</div>
</form>
</div>
<div class="box-footer clearfix">
<button type="button" class="pull-right btn btn-default" id="sendEmail">Send
<i class="fa fa-arrow-circle-right"></i></button>
</div>
</div>
</section>
<!-- /.Left col -->
<!-- right col (We are only adding the ID to make the widgets sortable)-->
<section class="col-lg-5 connectedSortable">
<!-- Map box -->
<div class="box box-solid bg-light-blue-gradient">
<div class="box-header">
<!-- tools box -->
<div class="pull-right box-tools">
<button type="button" class="btn btn-primary btn-sm daterange pull-right" data-toggle="tooltip"
title="Date range">
<i class="fa fa-calendar"></i></button>
<button type="button" class="btn btn-primary btn-sm pull-right" data-widget="collapse"
data-toggle="tooltip" title="Collapse" style="margin-right: 5px;">
<i class="fa fa-minus"></i></button>
</div>
<!-- /. tools -->
<i class="fa fa-map-marker"></i>
<h3 class="box-title">
å¼åè¯è¨èä½å æ¯
</h3>
</div>
<div class="box-body">
<div id="jobPie" style="height: 250px; width: 100%;"></div>
</div>
<!-- /.box-body-->
<div class="box-footer no-border">
<div class="row">
<div class="col-xs-4 text-center" style="border-right: 1px solid #f4f4f4">
<div id="sparkline-1"></div>
<div class="knob-label">Visitors</div>
</div>
<!-- ./col -->
<div class="col-xs-4 text-center" style="border-right: 1px solid #f4f4f4">
<div id="sparkline-2"></div>
<div class="knob-label">Online</div>
</div>
<!-- ./col -->
<div class="col-xs-4 text-center">
<div id="sparkline-3"></div>
<div class="knob-label">Exists</div>
</div>
<!-- ./col -->
</div>
<!-- /.row -->
</div>
</div>
<!-- /.box -->
<!-- solid sales graph -->
<div class="box box-solid bg-teal-gradient">
<div class="box-header">
<i class="fa fa-th"></i>
<h3 class="box-title">Sales Graph</h3>
<div class="box-tools pull-right">
<button type="button" class="btn bg-teal btn-sm" data-widget="collapse"><i class="fa fa-minus"></i>
</button>
<button type="button" class="btn bg-teal btn-sm" data-widget="remove"><i class="fa fa-times"></i>
</button>
</div>
</div>
<div class="box-body border-radius-none">
<div class="chart" id="line-chart" style="height: 250px;">
</div>
</div>
<!-- /.box-body -->
<div class="box-footer no-border">
<div class="row">
<div class="col-xs-4 text-center" style="border-right: 1px solid #f4f4f4">
<input type="text" class="knob" data-readonly="true" value="20" data-width="60" data-height="60"
data-fgColor="#39CCCC">
<div class="knob-label">Mail-Orders</div>
</div>
<!-- ./col -->
<div class="col-xs-4 text-center" style="border-right: 1px solid #f4f4f4">
<input type="text" class="knob" data-readonly="true" value="50" data-width="60" data-height="60"
data-fgColor="#39CCCC">
<div class="knob-label">Online</div>
</div>
<!-- ./col -->
<div class="col-xs-4 text-center">
<input type="text" class="knob" data-readonly="true" value="30" data-width="60" data-height="60"
data-fgColor="#39CCCC">
<div class="knob-label">In-Store</div>
</div>
<!-- ./col -->
</div>
<!-- /.row -->
</div>
<!-- /.box-footer -->
</div>
<!-- /.box -->
<!-- Calendar -->
<div class="box box-solid bg-green-gradient">
<div class="box-header">
<i class="fa fa-calendar"></i>
<h3 class="box-title">Calendar</h3>
<!-- tools box -->
<div class="pull-right box-tools">
<!-- button with a dropdown -->
<div class="btn-group">
<button type="button" class="btn btn-success btn-sm dropdown-toggle" data-toggle="dropdown">
<i class="fa fa-bars"></i></button>
<ul class="dropdown-menu pull-right" role="menu">
<li><a href="#">Add new event</a></li>
<li><a href="#">Clear events</a></li>
<li class="divider"></li>
<li><a href="#">View calendar</a></li>
</ul>
</div>
<button type="button" class="btn btn-success btn-sm" data-widget="collapse"><i class="fa fa-minus"></i>
</button>
<button type="button" class="btn btn-success btn-sm" data-widget="remove"><i class="fa fa-times"></i>
</button>
</div>
<!-- /. tools -->
</div>
<!-- /.box-header -->
<div class="box-body no-padding">
<!--The calendar -->
<div id="calendar" style="width: 100%"></div>
</div>
<!-- /.box-body -->
<div class="box-footer text-black">
<div class="row">
<div class="col-sm-6">
<!-- Progress bars -->
<div class="clearfix">
<span class="pull-left">Task #1</span>
<small class="pull-right">90%</small>
</div>
<div class="progress xs">
<div class="progress-bar progress-bar-green" style="width: 90%;"></div>
</div>
<div class="clearfix">
<span class="pull-left">Task #2</span>
<small class="pull-right">70%</small>
</div>
<div class="progress xs">
<div class="progress-bar progress-bar-green" style="width: 70%;"></div>
</div>
</div>
<!-- /.col -->
<div class="col-sm-6">
<div class="clearfix">
<span class="pull-left">Task #3</span>
<small class="pull-right">60%</small>
</div>
<div class="progress xs">
<div class="progress-bar progress-bar-green" style="width: 60%;"></div>
</div>
<div class="clearfix">
<span class="pull-left">Task #4</span>
<small class="pull-right">40%</small>
</div>
<div class="progress xs">
<div class="progress-bar progress-bar-green" style="width: 40%;"></div>
</div>
</div>
<!-- /.col -->
</div>
<!-- /.row -->
</div>
</div>
<!-- /.box -->
</section>
<!-- right col -->
</div>
<!-- /.row (main row) -->
</section>
<!-- /.content -->
</div>
<!-- /.content-wrapper -->
{% include 'footer.html' %}
{# echartç¨æ¥å¾è¡¨åï¼å¨jså
éé¢ #}
{#<script src="{{ url_for('static',filename='echarts/echarts.js') }}"></script>#}
{#<script src="{{ url_for('static',filename='echarts/china.js') }}"></script>#}
{#<script src="{{ url_for('static',filename='echarts/chartsdata.js') }}"></script>#}
footer.htmlï¼
<footer class="main-footer">
<div class="pull-right hidden-xs">
<b>Version</b> 2.4.0
</div>
<strong>Copyright © 2014-2016 <a href="https://adminlte.io">Almsaeed Studio</a>.</strong> All rights
reserved.
</footer>
<!-- Control Sidebar -->
<aside class="control-sidebar control-sidebar-dark">
<!-- Create the tabs -->
<ul class="nav nav-tabs nav-justified control-sidebar-tabs">
<li><a href="#control-sidebar-home-tab" data-toggle="tab"><i class="fa fa-home"></i></a></li>
<li><a href="#control-sidebar-settings-tab" data-toggle="tab"><i class="fa fa-gears"></i></a></li>
</ul>
<!-- Tab panes -->
<div class="tab-content">
<!-- Home tab content -->
<div class="tab-pane" id="control-sidebar-home-tab">
<h3 class="control-sidebar-heading">Recent Activity</h3>
<ul class="control-sidebar-menu">
<li>
<a href="javascript:void(0)">
<i class="menu-icon fa fa-birthday-cake bg-red"></i>
<div class="menu-info">
<h4 class="control-sidebar-subheading">Langdon's Birthday</h4>
<p>Will be 23 on April 24th</p>
</div>
</a>
</li>
<li>
<a href="javascript:void(0)">
<i class="menu-icon fa fa-user bg-yellow"></i>
<div class="menu-info">
<h4 class="control-sidebar-subheading">Frodo Updated His Profile</h4>
<p>New phone +1(800)555-1234</p>
</div>
</a>
</li>
<li>
<a href="javascript:void(0)">
<i class="menu-icon fa fa-envelope-o bg-light-blue"></i>
<div class="menu-info">
<h4 class="control-sidebar-subheading">Nora Joined Mailing List</h4>
<p>[email protected]</p>
</div>
</a>
</li>
<li>
<a href="javascript:void(0)">
<i class="menu-icon fa fa-file-code-o bg-green"></i>
<div class="menu-info">
<h4 class="control-sidebar-subheading">Cron Job 254 Executed</h4>
<p>Execution time 5 seconds</p>
</div>
</a>
</li>
</ul>
<!-- /.control-sidebar-menu -->
<h3 class="control-sidebar-heading">Tasks Progress</h3>
<ul class="control-sidebar-menu">
<li>
<a href="javascript:void(0)">
<h4 class="control-sidebar-subheading">
Custom Template Design
<span class="label label-danger pull-right">70%</span>
</h4>
<div class="progress progress-xxs">
<div class="progress-bar progress-bar-danger" style="width: 70%"></div>
</div>
</a>
</li>
<li>
<a href="javascript:void(0)">
<h4 class="control-sidebar-subheading">
Update Resume
<span class="label label-success pull-right">95%</span>
</h4>
<div class="progress progress-xxs">
<div class="progress-bar progress-bar-success" style="width: 95%"></div>
</div>
</a>
</li>
<li>
<a href="javascript:void(0)">
<h4 class="control-sidebar-subheading">
Laravel Integration
<span class="label label-warning pull-right">50%</span>
</h4>
<div class="progress progress-xxs">
<div class="progress-bar progress-bar-warning" style="width: 50%"></div>
</div>
</a>
</li>
<li>
<a href="javascript:void(0)">
<h4 class="control-sidebar-subheading">
Back End Framework
<span class="label label-primary pull-right">68%</span>
</h4>
<div class="progress progress-xxs">
<div class="progress-bar progress-bar-primary" style="width: 68%"></div>
</div>
</a>
</li>
</ul>
<!-- /.control-sidebar-menu -->
</div>
<!-- /.tab-pane -->
<!-- Stats tab content -->
<div class="tab-pane" id="control-sidebar-stats-tab">Stats Tab Content</div>
<!-- /.tab-pane -->
<!-- Settings tab content -->
<div class="tab-pane" id="control-sidebar-settings-tab">
<form method="post">
<h3 class="control-sidebar-heading">General Settings</h3>
<div class="form-group">
<label class="control-sidebar-subheading">
Report panel usage
<input type="checkbox" class="pull-right" checked>
</label>
<p>
Some information about this general settings option
</p>
</div>
<!-- /.form-group -->
<div class="form-group">
<label class="control-sidebar-subheading">
Allow mail redirect
<input type="checkbox" class="pull-right" checked>
</label>
<p>
Other sets of options are available
</p>
</div>
<!-- /.form-group -->
<div class="form-group">
<label class="control-sidebar-subheading">
Expose author name in posts
<input type="checkbox" class="pull-right" checked>
</label>
<p>
Allow the user to show his name in blog posts
</p>
</div>
<!-- /.form-group -->
<h3 class="control-sidebar-heading">Chat Settings</h3>
<div class="form-group">
<label class="control-sidebar-subheading">
Show me as online
<input type="checkbox" class="pull-right" checked>
</label>
</div>
<!-- /.form-group -->
<div class="form-group">
<label class="control-sidebar-subheading">
Turn off notifications
<input type="checkbox" class="pull-right">
</label>
</div>
<!-- /.form-group -->
<div class="form-group">
<label class="control-sidebar-subheading">
Delete chat history
<a href="javascript:void(0)" class="text-red pull-right"><i class="fa fa-trash-o"></i></a>
</label>
</div>
<!-- /.form-group -->
</form>
</div>
<!-- /.tab-pane -->
</div>
</aside>
<!-- /.control-sidebar -->
<!-- Add the sidebar's background. This div must be placed
immediately after the control sidebar -->
<div class="control-sidebar-bg"></div>
</div>
<!-- ./wrapper -->
<!-- jQuery 3 -->
<script src="{{ url_for('static',filename='jquery/dist/jquery.min.js') }}"></script>
<!-- jQuery UI 1.11.4 -->
<script src="{{ url_for('static',filename='jquery-ui/jquery-ui.min.js') }}"></script>
<!-- Resolve conflict in jQuery UI tooltip with Bootstrap tooltip -->
<script>
$.widget.bridge('uibutton', $.ui.button);
</script>
<!-- Bootstrap 3.3.7 -->
<script src="{{ url_for('static',filename='bootstrap/dist/js/bootstrap.min.js') }}"></script>
<!-- Morris.js charts -->
<script src="{{ url_for('static',filename='raphael/raphael.min.js') }}"></script>
<script src="{{ url_for('static',filename='morris.js/morris.min.js') }}"></script>
<!-- Sparkline -->
<script src="{{ url_for('static',filename='jquery-sparkline/dist/jquery.sparkline.min.js') }}"></script>
<!-- jQuery Knob Chart -->
<script src="{{ url_for('static',filename='jquery-knob/dist/jquery.knob.min.js') }}"></script>
<!-- daterangepicker -->
<script src="{{ url_for('static',filename='moment/min/moment.min.js') }}"></script>
<script src="{{ url_for('static',filename='bootstrap-daterangepicker/daterangepicker.js') }}"></script>
<!-- datepicker -->
<script src="{{ url_for('static',filename='bootstrap-datepicker/dist/js/bootstrap-datepicker.min.js') }}"></script>
<!-- Slimscroll -->
<script src="{{ url_for('static',filename='jquery-slimscroll/jquery.slimscroll.min.js') }}"></script>
<!-- FastClick -->
<script src="{{ url_for('static',filename='fastclick/lib/fastclick.js') }}"></script>
<!-- AdminLTE App -->
<script src="{{ url_for('static',filename='js/adminlte.min.js') }}"></script>
<!-- AdminLTE dashboard demo (This is only for demo purposes) -->
<script src="{{ url_for('static',filename='js/pages/dashboard.js') }}"></script>
<!-- AdminLTE for demo purposes -->
<script src="{{ url_for('static',filename='js/demo.js') }}"></script>
</body>
</html>
index.htmlï¼
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>èä½åæç³»ç»ä¸»é¡µ</title>
<link rel="stylesheet" href="{{ url_for('static',filename='bootstrap/dist/css/bootstrap.min.css') }}"/>
<!-- Font Awesome -->
<link rel="stylesheet" href="{{ url_for('static',filename='font-awesome/css/font-awesome.min.css') }}"/>
<!-- Ionicons -->
<link rel="stylesheet" href="{{ url_for('static',filename='bower_components/Ionicons/css/ionicons.min.css') }}"/>
<!-- Theme style -->
<link rel="stylesheet" href="{{ url_for('static',filename='css/AdminLTE.css') }}" />
<link rel="stylesheet" href="{{ url_for('static',filename='css/style.css') }}" />
<script type="text/javascript" src="{{ url_for('static',filename='js/jquery-3.2.1.min.js') }}"></script>
<script type="text/javascript" src="{{ url_for('static',filename='js/formvalidator.js') }}"></script>
<!-- Bootstrap 3.3.7 -->
<script src="{{ url_for('static', filename='bootstrap/dist/js/bootstrap.min.js') }}"></script>
<link rel="stylesheet" href="{{ url_for('static',filename='bootstrapvalidator/css/bootstrapValidator.css') }}" />
</head>
<body style="min-width:1200px;padding: 0px;margin: 0;background-color: lavenderblush;">
<div id="header" style="width: 100%;margin: 0px;padding: 0px;height: 40px;border: solid 0px red;background-color: greenyellow; ">
<div style="width: 90%;border: solid 0px red;margin-left: 5%;padding: 6px;" align="left">
<div style="border: solid 0px red;padding: 0px;float: left"></div>
<div style="border: solid 0px red;padding: 0px;float: right">
{% if session.get('user') == None %}
<a href="/login.do">ç»å½ </a>
<a href="#" type="button" class="btn btn-info" data-toggle="modal" data-target="#modal-info">注å </a>
{% elif session.get('user') != None %}
{{ session.get('user') }}
<a href="/logout.do">注é</a>
{% endif %}
</div>
</div>
</div>
<div id='main' style="width: 90%;border: solid 0px red;margin-left: 5%;" align="center">
<div id='middle' style="min-height:800px;background-color: #0b58a2;width: 60%;float:left;border: solid 0px red;margin-left: 300px;">
<div style="width: 100%;">
<div style="width: 100%;">
<div id="myCarousel" class="carousel slide" >
<!â æé®æä½åº-->
<ol class="carousel-indicators">
<li data-target="#myCarousel" data-slide-to="0" class="active"></li>
<li data-target="#myCarousel" data-slide-to="1"></li>
<li data-target="#myCarousel" data-slide-to="2"></li>
</ol>
<!â è½®æåºå-->
<div class="carousel-inner" >
<!â è½®æå项ï¼å
å«å¾ç以åæå说æ-->
<div class="item active">
<img src="{{ url_for('static',filename='img/ä½ åæ ¼äº.jpg') }}" class="img-responsive" alt="logo">
</div>
<div class="item">
<img src="{{ url_for('static',filename='img/åå¾ä¸æ¹.jpg') }}" class="img-responsive" alt="logo">
</div>
<div class="item">
<img src="{{ url_for('static',filename='img/åååååå.jpg') }}" class="img-responsive" alt="logo">
</div>
<!â å¿«éæä½åº-->
<a class="left carousel-control" href="#myCarousel" data-slide="prev">
<span class="sr-only">prev</span>
</a>
<a class="right carousel-control" href="#myCarousel" data-slide="next">
<span class="sr-only">next</span>
</a>
</div>
</div>
<script type="text/javascript">
var options = {
//设å®è½®æçé´éæ¶é´ï¼å使¯«ç§
interval:2000,
//å½é¼ æ æ¬æµ®æ¶åæ¢è½®æ
pause:hover,
//æ¯å¦å¾ªç¯ææ¾
wrap:true,
//æ¯å¦ååºé®çäºä»¶
keyboard:true
}
$("#myCarousel").carousel(options);
</script>
</div>
</div>
</div>
</div>
<div class="modal modal-default fade" id="modal-info">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span></button>
<h4 class="modal-title">注åè´¦å·</h4>
</div>
<div class="modal-body">
<!-- form start -->
<form role="form" class="form-horizontal" method="post" name="regForm" id="regForm" enctype="multipart/form-data">
<div class="box-body">
<div class="form-group">
<label for="userName">ç¨æ·å:</label>
<input type="text" class="form-control" id="userName" name="userName" placeholder="ç¨æ·å" required>
</div>
<div class="form-group">
<label for="userPwd">å¯ç :</label>
<input type="password" class="form-control" id="userPwd" name="userPwd" placeholder="å¯ç " required>
</div>
<div class="form-group">
<label for="reUserPwd">éå¤å¯ç ï¼</label>
<input type="password" class="form-control" id="reUserPwd" name="reUserPwd" placeholder="éå¤å¯ç " required>
</div>
<div class="form-group">
<label for="userPic">个人å¾å:</label>
<img src="" alt="å¾ç" id="userImg" style="width: 75px;height: 100px;border: dashed 1px beige;" />
<input type="file" id="upload" name="upload">
<button type="button" class="btn btn-default" οnclick="ajaxUploadFile()">ä¸ä¼ </button>
<progress id="progress"></progress>
<input type="hidden" id="picPath" name="picPath">
</div>
<div class="form-group">
<label for="userBirth">åºçæ¥æ:</label>
<div class="input-group date">
<div class="input-group-addon">
<i class="fa fa-calendar"></i>
</div>
<input type="text" class="form-control pull-right" id="userBirth" name="userBirth">
</div>
</div>
<div class="form-group">
<label>
æ§å«:
</label>
<input type="radio" value="1" name="userSex">ç·<input type="radio" name="userSex" value="2">女
</div>
<div class="form-group">
<label for="exampleInputFile">个人ç®ä»:</label>
<div class="box-body pad">
<textarea id="userIntro" name="userIntro" rows="2" cols="60">
</textarea>
</div>
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default pull-left" data-dismiss="modal">åæ¶</button>
<button type="button" class="btn btn-primary" οnclick="submitRegist()">æäº¤</button>
</div>
</div>
<!-- /.modal-content -->
</div>
<!-- /.modal-dialog -->
</div>
<!-- /.modal -->
</body>
</html>
login.htmlï¼
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>ç»å½</title>
<!-- Tell the browser to be responsive to screen width -->
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
<!-- Bootstrap 3.3.7 -->
<link rel="stylesheet" href="static/bootstrap/dist/css/bootstrap.min.css">
<!-- Font Awesome -->
<link rel="stylesheet" href="static/font-awesome/css/font-awesome.min.css">
<!-- Ionicons -->
<link rel="stylesheet" href="static/bower_components/Ionicons/css/ionicons.min.css">
<!-- Theme style -->
<link rel="stylesheet" href="static/css/AdminLTE.css">
</head>
<body class="hold-transition login-page">
<div class="login-box">
<div class="login-logo">
<a href="#">è使°æ®åæå¹³å°</a>
</div>
<!-- /.login-logo -->
<div class="login-box-body">
<p class="login-box-msg">亲ï¼è¯·ç»å½:</p>
<form action="login.do" method="post">
<div class="form-group has-feedback">
<input type="text" name="userName" class="form-control" placeholder="ç¨æ·å" required>
<span class="glyphicon glyphicon-user form-control-feedback"></span>
</div>
<div class="form-group has-feedback">
<input type="password" name="userPwd" class="form-control" placeholder="å¯ç " required>
<span class="glyphicon glyphicon-lock form-control-feedback"></span>
</div>
<div class="row">
<div class="col-xs-8">
<div class="checkbox icheck">
<label>
<input type="checkbox"> è®°ä½å¯ç
</label>
</div>
</div>
<!-- /.col -->
<div class="col-xs-4">
<button type="submit" class="btn btn-primary btn-block btn-flat">ç»å½</button>
</div>
<!-- /.col -->
</div>
</form>
<div class="social-auth-links text-center">
<p></p>
<a href="#" class="btn btn-block btn-social btn-primary btn-flat"><i class="fa fa-qq"></i> 使ç¨QQç»å½</a>
<a href="#" class="btn btn-block btn-social btn-success btn-flat"><i class="fa fa-weixin"></i> 使ç¨å¾®ä¿¡ç»å½</a>
</div>
<!-- /.social-auth-links -->
<a href="#">å¿è®°å¯ç </a><br>
<a href="register.html" class="text-center">æ³¨åæ°ç¨æ·</a>
</div>
<!-- /.login-box-body -->
</div>
<!-- /.login-box -->
<!-- jQuery 3 -->
<script src="static/jquery/dist/jquery.min.js"></script>
<!-- Bootstrap 3.3.7 -->
<script src="static/bootstrap/dist/js/bootstrap.min.js"></script>
</body>
</html>
userdao.pyï¼
from .basedao import BaseDao
class UserDao(BaseDao):
def findUserByUserName(self, userName):
try:
sql = "select * from job_user where user_name=%s"
self.getConnection()
self.execute(sql, (userName,))
result = self.fetch()
finally:
self.close()
return result
pass
def createUser(self, user):
try:
params = [user.userName, user.userPwd]
sql = "insert into job_user (user_name, user_pwd"
values = " values (%s, %s"
if user.userSex:
sql += ",user_sex"
values += ",%s"
params.append(user.userSex)
pass
if user.userPic:
sql += ",user_pic"
values += ",%s"
params.append(user.userPic)
pass
if user.userIntro:
sql += ",user_intro"
values += ",%s"
params.append(user.userIntro)
pass
if user.userBirth:
sql += ",user_birth"
values += ",DATE_FORMAT(%s,'%%Y-%%m-%%d')"
params.append(user.userBirth)
pass
sql +=")" + values + ")"
self.getConnection()
result = self.execute(sql, params)
self.commit() # æ§è¡äºsqlè¯å¥ä¹åè¦commit
return result
except Exception as e:
print(e)
finally:
self.close()
pass
pass
def findUserList(self, user):
try:
params = []
# sqlè¯å¥åparamså°±éè¦æ¯å¨æ
sql = "select * from job_user where 1=1 " # where 1=1æ¯ä¸ºäºä¾¿äºå¢å and
if user.userName:
sql += " and user_name like %s " # æ¨¡ç³æ¥è¯¢
params.append('%'+user.userName + '%')
pass
if user.userSex:
sql += " and user_sex=%s"
params.append(user.userSex)
pass
self.getConnection()
self.execute(sql, params)
result = self.fetch()
finally:
self.close()
return result
pass
def removeUser(self, userId):
try:
sql = "delete from job_user where user_id=%s"
self.getConnection()
result = self.execute(sql, (userId, ))
self.commit() # æ§è¡äºsqlè¯å¥ä¹åè¦commit
return result
finally:
self.close()
pass
pass
def findUserByUserId(self, userId):
try:
sql = "select * from job_user u left join job_dept d on u.user_deptid=d.dept_id where user_id=%s"
self.getConnection()
self.execute(sql, (userId,))
result = self.fetch()
finally:
self.close()
return result
pass
def updateUser(self, user):
try:
params = [user.userSex]
sql = "update job_user set user_sex=%s "
if user.userDeptId > 0:
sql += ", user_deptid=%s"
params.append(user.userDeptId)
sql += ' where user_id=%s'
params.append(user.userId)
self.getConnection()
result = self.execute(sql, params)
self.commit() # æ§è¡äºsqlè¯å¥ä¹åè¦commit
return result
except Exception as e:
print(e)
finally:
self.close()
pass
pass
def findPageUserList(self, user, pageSize, currentPage):
try:
params = []
# sqlè¯å¥åparamså°±éè¦æ¯å¨æ
sql = "select USER_ID,USER_NAME,USER_PWD,USER_AGE,USER_SEX,USER_QQ,USER_CELLPHONE," \
"USER_MONEY,USER_STATUS,USER_PIC,USER_INTRO,date_format(USER_BIRTH, '%%Y-%%m-%%d'),USER_DEPTID , dept_id, dept_name " \
"from job_user left join job_dept on job_user.user_deptid=job_dept.dept_id where 1=1 " # where 1=1æ¯ä¸ºäºä¾¿äºå¢å and
if user.userName:
sql += " and user_name like %s " # æ¨¡ç³æ¥è¯¢
params.append('%' + user.userName + '%')
pass
if user.userSex:
sql += " and user_sex=%s"
params.append(user.userSex)
pass
startRow = (currentPage - 1)*pageSize
sql += "limit %s, %s"
params.append(startRow)
params.append(pageSize)
self.getConnection()
self.execute(sql, params)
result = self.fetch()
finally:
self.close()
return result
pass
def countUsers(self, user):
params = []
# sqlè¯å¥åparamså°±éè¦æ¯å¨æ
sql = "select count(*) from job_user u left join job_dept d on u.user_deptid=d.dept_id where 1=1 " # where 1=1æ¯ä¸ºäºä¾¿äºå¢å and
if user.userName:
sql += " and user_name like %s " # æ¨¡ç³æ¥è¯¢
params.append('%' + user.userName + '%')
pass
if user.userSex:
sql += " and user_sex=%s"
params.append(user.userSex)
pass
self.getConnection()
self.execute(sql, params)
result = self.fetchOne()
return result
pass
pass
deptdao.pyï¼
from .basedao import BaseDao
class DeptDao(BaseDao):
def findDeptListByParentId(self, parentId):
try:
params = []
sql = "select * from job_dept where 1=1 "
if parentId ==0:
sql += 'and dept_parentid is null'
else:
sql += 'and dept_parentid=%s'
params.append(parentId)
pass
self.getConnection()
self.execute(sql, params)
self.commit()
return self.fetch()
except Exception as e:
print(e)
finally:
self.close()
pass
pass
pass
userservice.pyï¼
from dao.userdao import UserDao
from entity.user import User
class UserService:
def findUserByUserName(self, userName):
userDao = UserDao()
return userDao.findUserByUserName(userName)
pass
def createUser(self, user):
userDao = UserDao()
return userDao.createUser(user)
pass
def findUserList(self, user):
userDao = UserDao()
userlist = []
result = userDao.findUserList(user)
for temp in result:
tuser = User()
tuser.userId = temp[0]
tuser.userName = temp[1]
tuser.userSex = temp[4]
userlist.append(tuser)
pass
return userlist
pass
def removeUser(self, userId):
userDao = UserDao()
return userDao.removeUser(userId)
pass
def findUserByUserId(self, userId):
userDao = UserDao()
result = userDao.findUserByUserId(userId)
user = None
if result:
user = User()
user.userId = result[0][0]
user.userName = result[0][1]
user.userSex = result[0][4]
user.userDeptId = result[0][13]
user.userDeptName = result[0][14]
pass
return user
pass
# ä¿®æ¹ç¨æ·ä¿¡æ¯
def updateUser(self, user):
userDao = UserDao()
return userDao.updateUser(user)
pass
def findPageUserList(self, user, pageSize, currentPage):
userDao = UserDao()
return userDao.findPageUserList(user, pageSize, currentPage)
pass
def countUsers(self, user):
userDao = UserDao()
return userDao.countUsers(user)[0]
pass
pass
deptservice.pyï¼
from dao.deptdao import DeptDao
class DeptService():
def findDeptListByParentId(self,parentId):
deptDao = DeptDao()
return deptDao.findDeptListByParentId(parentId)
pass
pass
usercontroller.pyï¼
from flask import Blueprint, render_template,request,session,Response
import hashlib
from service.userservice import UserService
from entity.user import User
import json
from filter.sessionfilter import sessionFilter
import os
usercontroller = Blueprint('usercontroller', __name__)
userService = UserService()
@usercontroller.route("/login.do", methods=['POST', 'GET'])
def login():
userName = request.form.get('userName') # 表åæäº¤çæ°æ®ä½¿ç¨request.form[]
userPwd = request.form.get('userPwd')
result = userService.findUserByUserName(userName) # ä¸å¡é»è¾å± daoï¼database access object model
print(result)
if result and result[0][2] == hashlib.md5(userPwd.encode(encoding='utf-8')).hexdigest():#夿å¯ç æ¯å¦å å¯
userItem = {}
userItem['userId'] = result[0][0]
userItem['userName'] = result[0][1]
userItem['userPic'] = result[0][9]
session['user'] = userItem # sessionæ¯httpåè®®çç¶æè·è¸ªææ¯ï¼httpåè®®æ¯tcpçè¿æ¥
# sessionDict[sessionid][user]= userItem
print(hashlib.md5('123456'.encode(encoding='utf-8')).hexdigest())
# ç»å½æåï¼åä¿åCookiesä¿¡æ¯
resp = Response(render_template('main.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 result and result[2] != userPwd:
return render_template('login.html', message='ç¨æ·åæå¯ç é误')
pass
return render_template('login.html')
pass
@usercontroller.route('/logout.do', methods=['POST', 'GET'])
def logout():
#å
clearæ¸
é¤sessionï¼åå é¤cookieä¿¡æ¯ï¼ä¸ç¶å¾æ¸
两次session
session.clear()
print('==========', session.get('user'))
resp = Response(render_template('login.html'))
resp.delete_cookie('userName')
resp.delete_cookie('userPwd')
return resp
pass
@usercontroller.route('/regist.do', methods=['POST', 'GET'])
def regist():
userData = request.get_data()
userDict = json.loads(userData)
user = User()
user.userName = userDict.get('userName') # 表åæäº¤çæ°æ®ä½¿ç¨request.form[]
user.userPwd = hashlib.md5((userDict.get('userPwd')).encode(encoding='utf-8')).hexdigest()#å¯ç å å¯ä¼ å
¥æ°æ®åº
user.userPic = userDict.get('userPic')
user.userBirth = userDict.get('userBirth')
user.userSex = userDict.get('userSex')
user.userIntro = userDict.get('userIntro')
result = userService.createUser(user)
return json.dumps({'result':result})
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') # è¶
龿¥httpé»è®¤æ¯get请æ±
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=['POST', 'GET'])
def goModifyUser():
userId = request.args.get('userId')
user = userService.findUserByUserId(userId)
return render_template('systeminfo/modifyuser.html', user=user)
pass
@usercontroller.route('/gomodifysubmit.do', methods=['POST', 'GET'])
def goSubmitModifyUser():
userId = request.form.get('userId')
userName = request.form.get('userName')
userSex = request.form.get('userSex')
user = User()
user.userName = userName
user.userSex = userSex
user.userId = userId
result = userService.updateUser(user)
userList = userService.findUserList(user)
return render_template('systeminfo/userinfo.html', userList=userList, message='ä¿®æ¹æå' if result > 0 else 'ä¿®æ¹å¤±è´¥')
pass
@usercontroller.route('/checkusername.do', methods=['POST', 'GET'])
def checkUserName():
userData = request.get_data()
userDict = json.loads(userData)
user = userService.findUserByUserName(userDict.get('userName'))
dicts = {}
if user:
dicts = {'code':1}
pass
else:
dicts = {'code':0}
pass
return json.dumps(dicts)
pass
@usercontroller.route('/goajaxuserinfo.do', methods=['POST', 'GET'])
@sessionFilter
def goAjaxUserInfo():
return render_template("systeminfo/userinfo.html")
pass
@usercontroller.route('/ajaxuserinfo.do', methods=['POST', 'GET'])
def getUserInfo():
userData = request.get_data()
userDict = json.loads(userData)
tData = {}
user = User()
user.userName = userDict.get('userName')
user.userSex = userDict.get('userSex')
currentPage = int(userDict.get('currentPage'))
pageSize = int(userDict.get('pageSize'))
opr = userDict.get('opr')
userId = int(userDict.get('userId'))
user.userId = userId
user.userDeptId = int(userDict.get('userDeptId'))
updateResult = 0
if opr == 'del':
updateResult = userService.removeUser(userId)
pass
elif opr == 'update':
tUser = userService.findUserByUserId(userId)
tData['userId'] = tUser.userId
tData['userName'] = tUser.userName
tData['userSex'] = tUser.userSex
tData['userDeptId'] = tUser.userDeptId
tData['userDeptName'] = tUser.userDeptName
returnData = {'code': 1, 'userData': tData, 'pageSize': pageSize, 'currentPage': currentPage, 'opr':'update'}
return json.dumps(returnData)
elif opr == 'submitUpdate':
updateResult = userService.updateUser(user)
pass
result = userService.findPageUserList(user, pageSize, currentPage)
counts = userService.countUsers(user)
totalPage = 0
if(counts%pageSize == 0):
totalPage = counts//pageSize
else:
totalPage = counts // pageSize + 1
pass
returnData = {'code':1, 'userData':result, 'pageSize':pageSize, 'currentPage':currentPage, 'totalPage':totalPage, 'updateResult':updateResult, 'opr':'search','counts':counts}
return json.dumps(returnData)
pass
@usercontroller.route('/upload.do', methods=['POST', 'GET'], strict_slashes=False)
def uploadFile():
#ajax弿¥ä¸ä¼ æä»¶
# åç¼éè¦æ£æ¥ç
file = request.files.get('upload')
if file:
try:
file.save(os.path.dirname(__file__) + os.sep + '..' + os.sep + 'static' + os.sep + 'uploads'+ os.sep + file.filename) # ä¿åæä»¶å°uploadç®å½ï¼jséé¢ï¼
except Exception as e:
return json.dumps({'uploaded': 0, 'fileName': "", 'url': ""})
pass
return json.dumps({'uploaded': 1, 'fileName':file.filename, 'url': os.sep + 'static' + os.sep + 'uploads'+ os.sep + file.filename})
else:
return json.dumps({'uploaded': 0, 'fileName': "", 'url': ""})
pass
deptcontroller.pyï¼
from flask import Flask, render_template, request, session, Blueprint
from service.deptservice import DeptService
import json
deptcontroller = Blueprint('deptcontroller', __name__)
deptService = DeptService()
@deptcontroller.route('/getdeptlist.do')
def getDeptList():
parentId = request.args.get('parentId')
result = deptService.findDeptListByParentId(int(parentId))
return json.dumps({'code':1, 'data':result})
pass
user.pyï¼
class User():
def __init__(self):
self.__userId = None
self.__userName = None
self.__userPwd = None
self.__userSex = None
self.__userPic = None
self.__userBirth = None
self.__userIntro = None
self.__userDeptId = None
self.__userDeptName = None
pass
@property
def userId(self):
return self.__userId
pass
@userId.setter
def userId(self, userId):
self.__userId = userId
pass
@property
def userName(self):
return self.__userName
pass
@userName.setter
def userName(self, userName):
self.__userName = userName
pass
@property
def userPwd(self):
return self.__userPwd
pass
@userPwd.setter
def userPwd(self, userPwd):
self.__userPwd = userPwd
pass
@property
def userSex(self):
return self.__userSex
pass
@userSex.setter
def userSex(self, userSex):
self.__userSex = userSex
pass
@property
def userPic(self):
return self.__userPic
pass
@userPic.setter
def userPic(self, userPic):
self.__userPic = userPic
pass
@property
def userBirth(self):
return self.__userBirth
pass
@userBirth.setter
def userBirth(self, userBirth):
self.__userBirth = userBirth
pass
@property
def userIntro(self):
return self.__userIntro
pass
@userIntro.setter
def userIntro(self, userIntro):
self.__userIntro = userIntro
pass
@property
def userDeptId(self):
return self.__userDeptId
pass
@userDeptId.setter
def userDeptId(self,userDeptId):
self.__userDeptId =userDeptId
pass
@property
def userDeptName(self):
return self.__userDeptName
pass
@userDeptName.setter
def userDeptName(self, userDeptName):
self.__userDeptName = userDeptName
pass
pass
sessionfilter.py--------夿ç»éç¨æ·æ¯å¦åå¨ï¼ä»¥åç¸åºçå¤çï¼
from flask import Blueprint, Flask, render_template,request,session, url_for,Response, jsonify
sessionfilter = Blueprint('sessionfilter', __name__)
def sessionFilter(func):
def inner(*args, **kw):
user = session.get('user')
if not user:
return render_template("login.html")
pass
return func(*args, **kw)
pass
return inner
pass
js/userdata.js--------Ajaxææ¯å®ç°åå端å离ï¼å¨jsä¸è¿è¡æ°æ®å¤çï¼
function getUserData(currentPage, pageSize, opr, userId) {
var userName = document.searchForm.userName.value
var userSex = document.searchForm.userSex.value
var userDeptId = 0
if(opr == 'del'){
if(!confirm('ç¡®å®è¦å é¤åï¼')){
return false
}
}else if(opr == 'submitUpdate'){
userName = document.userForm.userName.value
userSex = document.userForm.userSex.value
userId = document.userForm.userId.value
userDeptId = document.userForm.userDeptId.value
currentPage = document.userForm.currentPage.value
pageSize = document.userForm.pageSize.value
}
$.ajax({
type: 'post', // ä¼ æ°æ®çæ¹å¼
url: '/ajaxuserinfo.do',
dataType: 'json', // xmlãjsonãscriptãhtml
data:JSON.stringify({
'userName': userName, // $('#userName') == document.getElementById('userName')
'userSex' : userSex,
'userId': userId,
'userDeptId': userDeptId,
'pageSize': pageSize,
'currentPage': currentPage,
'opr': opr // éç¨ä¸ä¸ªajax请æ±å®ç°å¢å å é¤ä¿®æ¹æ¥è¯¢ CRUD
}),
error: function(xhr, err){
alert('请æ±å¤±è´¥ï¼è¯·æ£æ¥ï¼' + err + '!')
},
success: function(data, textStatus){ // success对åºçåè°å½æ°ç第ä¸ä¸ªåæ°ï¼æ¯æå¡å¨è¿åçæ°æ®
// data = JSON.parse(data)
if(data.code == 1 && opr != 'update'){
var htmlText = ""
for(var i =0;i <data.userData.length;i++){
htmlText += '<tr>' +
' <td align="center"><input type="checkbox" name="userId" value="'+ data.userData[i][0] +'" /></td>\n' +
' <td>' + data.userData[i][0] + '</td>\n' +
' <td>' + data.userData[i][1] + '</td>\n' +
' <td>' + (data.userData[i][4] == 1 ? 'ç·':'女') + '</td>\n' +
' <td>' + data.userData[i][14] + '</td>\n' +
' <td style="width: 160px;">\n' +
' <button type="button" class="btn btn-danger" οnclick="getUserData('+ data.currentPage +',' + data.pageSize + ','+ '\'del\''+',' + data.userData[i][0] +')">å é¤</button>' +
' <button type="button" class="btn btn-info" οnclick="getUserData('+ data.currentPage +',' + data.pageSize + ','+ '\'update\''+',' + data.userData[i][0] +')">ä¿®æ¹</button>'+
' </td>\n' +
' </tr>\n'
}
pageText = '<tr style="text-align: right;"><td colspan="6">'+ 'å½å第' + data.currentPage + '页 æ»å
±æ' + data.totalPage + '页 ';
if(data.currentPage <= 1) {
pageText += 'é¦é¡µ ä¸ä¸é¡µ ';
}else{
pageText += '<a href="javascript:getUserData(1,10,\'search\', 0);">é¦é¡µ</a> ' +
'<a href="javascript:getUserData(' + (data.currentPage - 1) + ', 10, \'search\', 0);">ä¸ä¸é¡µ</a> ';
}
if(data.currentPage >= data.totalPage){
pageText += 'ä¸ä¸é¡µ 尾页 ';
}else {
pageText += '<a href="javascript:getUserData(' + (data.currentPage + 1) + ', 10, \'search\', 0);">ä¸ä¸é¡µ</a> ' +
'<a href="javascript:getUserData(' + data.totalPage + ', 10, \'search\', 0);">尾页</a> ';
}
pageText +='æ»å
±æ'+ data.counts + 'æ¡ </td></tr>'
$('#dataBody').empty()
$('#dataBody').append(htmlText)
$('#dataBody').append(pageText)
document.searchForm.currentPage.value = data.currentPage
document.searchForm.pageSize.value=data.pageSize
if( opr != 'search' && data.updateResult > 0 ) {
alert("æä½æå")
$('#modal-default').modal('hide')
}else if(opr != 'search' && data.updateResult <= 0){
alert("æä½å¤±è´¥")
}
}else if(data.code == 1 && opr == 'update'){
document.userForm.userName.value = data.userData.userName
if(data.userData.userSex == 1){
document.getElementById('male').checked = 'checked'
}else if(data.userData.userSex == 2){
document.getElementById('female').checked = 'checked'
}
document.userForm.userId.value = data.userData.userId
$('#userDept').html(data.userData.userDeptName)
document.userForm.userDeptId.value = data.userData.userDeptId
document.userForm.currentPage.value = data.currentPage
document.userForm.pageSize.value = data.pageSize
$('#modal-default').modal()
getDeptList(0, null, 1)
}
}
});
}
function getDeptList(parentId, obj, grade){
if(parentId == -1){
parentId = obj.value
document.userForm.userDeptId.value = obj.value
}else if(parentId == -99 || grade == 4){
return false
}
$.ajax({
type: 'get', // ä¼ æ°æ®çæ¹å¼
url: '/getdeptlist.do',
data:{
'parentId': parentId, // $('#userName') == document.getElementById('userName')
},
error: function (xhr, err) {
alert('请æ±å¤±è´¥ï¼è¯·æ£æ¥ï¼' + err + '!')
},
success: function (data, textStatus) { // success对åºçåè°å½æ°ç第ä¸ä¸ªåæ°ï¼æ¯æå¡å¨è¿åçæ°æ®
data = JSON.parse(data)
if(parentId == 0){
if(data.code == 1){
htmlText = '<option value="-99">éæ©é¨é¨</option>'
for(var i=0;i<data.data.length;i++){
htmlText += '<option value="' + data.data[i][0] +'">' + data.data[i][1] + '</option>'
}
$('#parentDept').html(htmlText)
}
}else{
if(data.code == 1 && grade == 2){
if(document.getElementById('gradeTwoDept')){
$('#gradeTwoDept').remove()
}
if(document.getElementById('gradeTreeDept')){
$('#gradeTreeDept').remove()
}
htmlText = '<select id="gradeTwoDept" οnchange="getDeptList(-1, this,3)" >'
htmlText += '<option value="-99">éæ©åé¨é¨</option>'
for(var i=0;i<data.data.length;i++){
htmlText += '<option value="' + data.data[i][0] +'">' + data.data[i][1] + '</option>'
}
htmlText += "</select>"
$('#deptContainer').append(htmlText)
}else if(data.code == 1 && grade == 3){
if(document.getElementById('gradeTreeDept')){
$('#gradeTreeDept').remove()
}
htmlText = '<select id="gradeTreeDept" οnchange="getDeptList(-1, this, 4)" >'
htmlText += '<option value="-99">éæ©åé¨é¨</option>'
for(var i=0;i<data.data.length;i++){
htmlText += '<option value="' + data.data[i][0] +'">' + data.data[i][1] + '</option>'
}
htmlText += "</select>"
$('#deptContainer').append(htmlText)
}
}
}
})
}
$(document).ready(
function(){
getUserData(1, 10, 'search', 0)
}
)
js/userregist.js------å é¨å«æå¯ææ¬ç¼è¯å¨ï¼å±äºAjaxç弿¥æä»¶ä¸ä¼ ï¼
function ajaxUploadFile(){
//å建FormData对象ï¼åå§å为form表åä¸çæ°æ®ãéè¦æ·»å å
¶ä»æ°æ®å¯ä½¿ç¨formData.append("property", "value");
var formData = new FormData($('#regForm')[0]); // $('#regForm')[0] == document.getElementById('regForm')== document.forms[0] == document.regForm
//ajax弿¥ä¸ä¼
$.ajax({
url: "/upload.do",
type: "POST",
data: formData, // 1ãjson对象{} 2ãjson String 3ãformData对象
xhr: function () { //è·åajaxSettingsä¸çxhr对象ï¼ä¸ºå®çupload屿§ç»å®progressäºä»¶çå¤ç彿°
myXhr = $.ajaxSettings.xhr();
if (myXhr.upload) { //æ£æ¥upload屿§æ¯å¦åå¨
//ç»å®progressäºä»¶çåè°å½æ° ç»<input type="file" name='upload' />
myXhr.upload.addEventListener('progress', progressHandlingFunction, false);
}
return myXhr; //xhr对象è¿åç»jQuery使ç¨
},
success: function (result) {
result = JSON.parse(result);
$("#userImg").attr("src", result.url); // å端æ¾ç¤ºä¸ä¼ 宿çå¾ç
document.regForm.picPath.value = result.url;
// $("#result").html(result);
},
contentType: false, //å¿
é¡»falseæä¼èªå¨å 䏿£ç¡®çContent-Type
processData: false //å¿
é¡»falseæä¼é¿å¼jQuery对 formdata çé»è®¤å¤ç
});
}
//ä¸ä¼ è¿åº¦åè°å½æ°ï¼
function progressHandlingFunction(e) {
if (e.lengthComputable) {
$('#progress').attr({ value: e.loaded, max: e.total }); //æ´æ°æ°æ®å°è¿åº¦æ¡
var percent = e.loaded / e.total * 100;
$('#progress').html(e.loaded + "/" + e.total + " bytes. " + percent.toFixed(2) + "%");
$('#progress').css('width', percent.toFixed(2) + "%");
}
}
function submitRegist() {
// æäº¤ä¹åå
对表åè¿è¡éªè¯
var bootstrapValidator = $("#regForm").data("bootstrapValidator");
bootstrapValidator.validate();
if(bootstrapValidator.isValid()) {
var a = document.regForm.userName.value
$.ajax({
type: 'post', // ä¼ æ°æ®çæ¹å¼
url: '/regist.do',
dataType: 'json', // xmlãjsonãscriptãhtml
data: JSON.stringify({
'userName': document.regForm.userName.value, // $('#userName') == document.getElementById('userName')
'userPwd': document.regForm.userPwd.value,
'userPic': document.regForm.picPath.value,
'userBirth': document.regForm.userBirth.value,
'userSex': document.regForm.userSex.value,
'userIntro': userEditor.getData() // éç¨ä¸ä¸ªajax请æ±å®ç°å¢å å é¤ä¿®æ¹æ¥è¯¢ CRUD
}),
error: function (xhr, err) {
alert('请æ±å¤±è´¥ï¼è¯·æ£æ¥ï¼' + err + '!')
},
success: function (data, textStatus) { // success对åºçåè°å½æ°ç第ä¸ä¸ªåæ°ï¼æ¯æå¡å¨è¿åçæ°æ®
if (data.result > 0) {
alert("注åæå,请ç»å½")
$('#modal-info').modal('hide')
} else {
alert("注å失败")
}
}
});
}
}
$(document).ready(function() {
$('#regForm').bootstrapValidator({
message: 'This value is not valid',
feedbackIcons: {
valid: 'glyphicon glyphicon-ok',
invalid: 'glyphicon glyphicon-remove',
validating: 'glyphicon glyphicon-refresh'
},
fields: {
userName: {
message: 'ç¨æ·åéªè¯å¤±è´¥',
validators: {
notEmpty: {
message: 'ç¨æ·åä¸è½ä¸ºç©º'
},
stringLength: {
min: 6,
max: 18,
message: 'ç¨æ·åé¿åº¦å¿
é¡»å¨6å°18ä½ä¹é´'
},
regexp: {
regexp: /^[a-zA-Z]\w{5,17}$/,
message: 'ç¨æ·åå¿
é¡»æ¯åæ¯å¼å¤´ï¼å¿
é¡»ç±æ°åãåæ¯ç»æ'
}
}
},
userPwd: {
validators: {
notEmpty: {
message: 'å¯ç ä¸è½ä¸ºç©º'
},
stringLength: {
min: 6,
max: 18,
message: 'å¯ç é¿åº¦å¿
é¡»å¨6å°18ä½ä¹é´'
},
identical: {
field: 'reUserPwd',
message: '两次å¯ç å¿
é¡»ä¸è´'
},
different: {
field: 'userName',
message: 'å¯ç ä¸è½ä¸ç¨æ·åç¸å'
},
regexp: {
regexp: /^\w+$/,
message: 'å¯ç å¿
é¡»ç±åç¬¦ç»æ'
}
}
},
reUserPwd: {
validators: {
notEmpty: {
message: '确认å¯ç ä¸è½ä¸ºç©º'
},
stringLength: {
min: 6,
max: 18,
message: 'å¯ç é¿åº¦å¿
é¡»å¨6å°18ä½ä¹é´'
},
identical: {
field: 'userPwd',
message: '两次å¯ç å¿
é¡»ä¸è´'
},
different: {
field: 'userName',
message: 'å¯ç ä¸è½ä¸ç¨æ·åç¸å'
},
regexp: {
regexp: /^\w+$/,
message: 'å¯ç å¿
é¡»ç±åç¬¦ç»æ'
}
}
},
}
});
});
config.pyèªå®ä¹é ç½®æä»¶ï¼å¨app.pyä¸å¼å ¥ï¼
'''
èªå®ä¹é ç½®æä»¶
'''
DEBUG = True
SECRET_KEY = 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
PAGE_SIZE = 10
SERVER_ADDR = '10.0.14.57'
SERVER_PORT = 80