todo清单
需要实现的功能有添加任务、删除任务、编辑任务,操作要关联数据库。
任务需要绑定用户,部门。用户需要绑定部门。
python" id="highlighter_522450">
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
{ #自己编写一个基类模板#} { % extends 'bootstrap/base.html' % } { % block styles % } {{ super () }} <link rel = "stylesheet" href = "../static/css/main.css" rel = "external nofollow" > { % endblock % } { % block navbar % } <nav class = "navbar navbar-default" > <div class = "container-fluid" > <! - - brand and toggle get grouped for better mobile display - - > <div class = "navbar-header" > <button type = "button" class = "navbar-toggle collapsed" data - toggle = "collapse" data - target = "#bs-example-navbar-collapse-1" aria - expanded = "false" > <span class = "sr-only" >toggle navigation< / span> <span class = "icon-bar" >< / span> <span class = "icon-bar" >< / span> <span class = "icon-bar" >< / span> < / button> <a class = "navbar-brand" href = "index.html" rel = "external nofollow" >< / a> < / div> <! - - collect the nav links, forms, and other content for toggling - - > <div class = "collapse navbar-collapse" id = "bs-example-navbar-collapse-1" > <ul class = "nav navbar-nav" > <li><a href = "#" rel = "external nofollow" rel = "external nofollow" rel = "external nofollow" rel = "external nofollow" rel = "external nofollow" >首页<span class = "sr-only" >(current)< / span>< / a>< / li> <li><a href = "#" rel = "external nofollow" rel = "external nofollow" rel = "external nofollow" rel = "external nofollow" rel = "external nofollow" >新闻< / a>< / li> <li><a href = "#" rel = "external nofollow" rel = "external nofollow" rel = "external nofollow" rel = "external nofollow" rel = "external nofollow" >国际< / a>< / li> <li><a href = "#" rel = "external nofollow" rel = "external nofollow" rel = "external nofollow" rel = "external nofollow" rel = "external nofollow" >国内< / a>< / li> <li><a href = "/sysinfo/" rel = "external nofollow" >系统信息< / a>< / li> <li><a href = "#" rel = "external nofollow" rel = "external nofollow" rel = "external nofollow" rel = "external nofollow" rel = "external nofollow" >登陆用户< / a>< / li> < / ul> <ul class = "nav navbar-nav navbar-right" > { % if 'user' in session % } <li><a href = "login.html" rel = "external nofollow" ><span class = "glyphicon glyphicon-user" >< / span> {{ session.user }}< / a>< / li> <li><a href = "/logout/" rel = "external nofollow" ><span class = "glyphicon glyphicon-log-in" >< / span> 注销 < / a>< / li> { % else % } <li><a href = "/login/" rel = "external nofollow" ><span class = "glyphicon glyphicon-log-in" >< / span> 登陆< / a>< / li> { % endif % } <li><a href = "/register/" rel = "external nofollow" ><span class = "glyphicon glyphicon-log-out" >< / span> 注册< / a>< / li> < / ul> < / div><! - - / .navbar - collapse - - > < / div><! - - / .container - fluid - - > < / nav> { % endblock % } { % block content % } { #定义属于自己的block#} { % block newcontent % } { % endblock % } { % block footer % } <div class = "footer" style = "margin: 0 auto" > 宇宙大魔王 < / div> { % endblock % } { % endblock % } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
{ #列表清单#} { % extends 'base.html' % } { % block newcontent % } <div class = "row" > <div class = "col-md-6 col-md-offset-3" > / * 添加任务 * / <form class = "form-horizontal" action = "/todo/add/" method = "post" > <div class = "form-group" > { # 添加框 #} <div class = "col-sm-9" > < input type = "text" class = "form-control" placeholder = "请添加任务" required = "required" name = "todo_name" > < / div> { # 选择框 #} <div class = "col-sm-2" > <select class = "form-control" name = "part" > { % for part in parts % } <option value = "{{ part.id }}" >{{ part.name }}< / option> { % endfor % } < / select> < / div> { # 添加的按钮 #} <div class = "col-sm-1" > < input type = "submit" class = "btn btn-success" value = "添加任务" > < / div> < / div> < / form> / * 任务显示 * / <h1>添加任务< / h1> <table class = "table table-bordered" > <tr> <td>任务内容< / td> <td>创建时间< / td> <td>状态< / td> <td>所属部门< / td> <td>操作< / td> < / tr> { % for todo in todos % } <tr> <td>{{ todo.name }}< / td> <td>{{ todo.add_time }}< / td> { # #} <td> { % if todo.status % } <a href = "/todo/undo/{{ todo.id }}/" rel = "external nofollow" class = "btn btn-sm btn-success" role = "button" ><span class = "glyphicon glyphicon-remove" >< / span> 已完成< / a> { % else % } <a href = "/todo/done/{{ todo.id }}/" rel = "external nofollow" class = "btn btn-sm btn-warning" role = "button" ><span class = "glyphicon glyphicon-remove" >< / span> 未完成< / a> { % endif % } < / td> <td>{{ todo.depart.name }}< / td> <td> { # <a href="/todo/delete/{{ todo.id }}/" rel="external nofollow" rel="external nofollow" role="button">删除</a>#} { # <a href="/todo/delete/{{ todo.id }}/" rel="external nofollow" rel="external nofollow" class="btn btn-primary btn-lg active" role="button">删除</a>#} <a href = "/todo/delete/{{ todo.id }}/" rel = "external nofollow" class = "btn btn-danger" role = "button" ><span class = "glyphicon glyphicon-remove" >< / span> 删除< / a> < / td> < / tr> { % endfor % } < / table> < / div> < / div> { % endblock % } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
# 数据库操作文件 todo_models.py from datetime import datetime import pymysql from flask import flask from flask_sqlalchemy import sqlalchemy from flask_bootstrap import bootstrap app = flask(__name__) app.config[ 'sqlalchemy_database_uri' ] = 'mysql+pymysql://root:sheen@localhost/todo' app.config[ 'sqlalchemy_track_modifications' ] = true db = sqlalchemy(app) bootstrap = bootstrap(app) class user(db.model): id = db.column(db.integer,autoincrement = true,primary_key = true) name = db.column(db.string( 30 ),unique = true) pwd = db.column(db.string( 30 )) add_time = db.column(db.datetime, default = datetime.now()) phone = db.column(db.string( 11 )) email = db.column(db.string( 18 ),unique = true) info = db.column(db.text) department_id = db.column(db.integer,db.foreignkey( 'department.id' )) #部门id与其他表关联 todo_id = db.relationship( 'todo' ,backref = 'user' ) def __repr__( self ): return '<user:%s>' % ( self .name) class department(db.model): id = db.column(db.integer,autoincrement = true,primary_key = true) name = db.column(db.string( 30 ),unique = true) users = db.relationship( 'user' ,backref = 'depart' ) todos = db.relationship( 'todo' ,backref = 'depart' ) def __repr__( self ): return '<depart:%s>' % ( self .name) class todo(db.model): id = db.column(db.integer,autoincrement = true,primary_key = true) name = db.column(db.string( 30 )) add_time = db.column(db.datetime, default = datetime.now()) status = db.column(db.boolean, default = false) department_id = db.column(db.integer,db.foreignkey( 'department.id' )) #部门id与其他表关联 user_id = db.column(db.integer,db.foreignkey( 'user.id' )) def __repr__( self ): return '<todo:%s>' % ( self .name) if __name__ = = '__main__' : db.drop_all() db.create_all() parts = [ '人事部' , 'python开发部' , 'java开发部' ] partobj = [department(name = part) for part in parts] db.session.add_all(partobj) db.session.commit() user_1 = user(name = 'sheen' ,pwd = '123' ,department_id = 2 ) db.session.add(user_1) db.session.commit() |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
# 试图函数程序 todo_views.py from flask import render_template, url_for, request, redirect from todo_models import app,todo,department,db @app .route( '/' ) def index(): return render_template( 'base.html' ) @app .route( '/login/' ) def login(): return render_template( 'todo_login.html' ) @app .route( '/list/' ) def todo_list(): todos = todo.query. all () parts = department.query. all () return render_template( 'todo_list.html' ,todos = todos,parts = parts) @app .route( '/todo/add/' ,methods = [ 'post' ]) def add(): name = request.form[ 'todo_name' ] #在todo_list.html文件中表单定义的添加任务input属性name="todo_name"。 part = request.form[ 'part' ] todo = todo(name = name,department_id = part,user_id = 1 ) db.session.add(todo) db.session.commit() print ( 'ok' ) return redirect(url_for( 'todo_list' )) @app .route( '/todo/undo/<int:id>/' ) def undo( id ): todo = todo.query.filter_by( id = id ).first() todo.status = false db.session.commit() return redirect(url_for( 'todo_list' )) @app .route( '/todo/done/<int:id>/' ) def done( id ): todo = todo.query.filter_by( id = id ).first() todo.status = true db.session.commit() return redirect(url_for( 'todo_list' )) @app .route( '/todo/delete/<int:id>/' ) def todo_del( id ): todo = todo.query.filter_by( id = id ).first() db.session.delete(todo) db.session.commit() return redirect(url_for( 'todo_list' )) |
1
2
3
4
5
6
7
|
# 主程序 run.py from flask import flask from todo_models import app from todo_views import * if __name__ = = '__main__' : app.run() |
list 页面最初显示图
当添加任务后,页面显示如下
当鼠标点击任务状态时,会发生改变
当点击删除按钮时,任务从数据库中删除,也不在页面中显示
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://segmentfault.com/a/1190000016866261