本周的任务要求如下:
要求用flask建设一个课题组网站,具体要求如下:
1)风格可大致如上周所给<a target=_blank target="_blank" href="http://vision.stanford.edu/index.html">范例网站</a>
2)网站为双语,就是跟<a target=_blank target="_blank" href="http://www.suda.edu.cn/">苏大网站</a>一样,每一块文本内容都有中文和英语两种语言(两个对应页面,要求录入者在中文和英文描述框都输入);
3)角色分四类:管理者(就是老师)、内容添加者(老师指定的课题组同学)、课题组成员和普通浏览者;
4)数据库还是mysql;
5)网站内容分老师介绍、课题组同学介绍、课题组活动和成果与资源四部分;
其中老师介绍分成:简介、项目列表、论文列表、专利列表等几个模块;
课题组同学介绍:每个同学的姓名、身份、照片等信息,可以链接一个超链接到同学个人网页(若有)
课题组活动:课题组的一些学术和日常交流活动,如一次讨论会、一次聚会。每一次活动有一个日志和一组照片。
成果与资源:如果我们将来有一些好的创意变成了软件产品,可以放这里;另外可以放一些机器学习资源链接。
网站内容的每一个内容都分成有权限查看和普通内容;前者仅对课题组成员可见或下载;
6)管理者可以管理所有网站内容(增删减),内容添加者可以对指定网站内容操作(如课题组活动部分),课题组成员登录后可以浏览相关内容,普通浏览者只能浏览非权限内容。
0.网站的内容抄的是苏州大学官网。css样式抄的是范例网站。
1.这次我通过Dreamweaver来完成html代码的设计和编写。它的优点是能够实时的将代码的变化立即表现出来,对我这种没有系统学习过html的人有很大的帮助。
2.截止到目前完成的部分任务:注册、登录、部分网页的实现。
注册:python代码部分:
@app.route('/regist.html',methods = ['GET','POST'])
def regist():
if request.method == 'POST':
try:
conn = MySQLdb.connect(host= "localhost",user = "root",passwd = "root",db = "myblog",charset='UTF8')
except Exception,e:
print e
sys.exit()
# 获取cursor对象来进行操作
cursor = conn.cursor()
# 创建表
sql = "create table if not exists regist(username varchar(20) primary key ,password varchar(20),priority varchar(20))"
cursor.execute(sql)
username = request.form.get('username')
password = request.form.get('password')
password2 = request.form.get('password2')
priority = request.form.get('priority')
if password == password2:
sql = "insert into regist values ('%s','%s','%s')"% (username,password,priority)
while (True):
try:
cursor.execute(sql)
conn.commit()
break
except Exception,e:
return '用户名已存在,请重新注册!'
cursor.close()
conn.close()
return "%s,%s" %(username,priority)
else:
return '两次输入的密码不同,请重新注册。'
else:
return render_template('regist.html')
html部分:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<title>注册</title>
<meta name="keywords" content="注册" />
<meta name="description" content="注册页面、http://www.acfun.tv/reg/" />
</head>
<body>
<form method="post" >
<h1 class="title">注册</h1>
<div class="area">
<label for="ipt-username-reg" class="l">账号</label>
<input required="required" placeholder="请输入账号" id="ipt-username-reg" name="username" spellcheck="false" data-name="昵称" data-direction="right" data-length="2,10" class="name l" type="text">
<span class="clearfix"></span>
</div>
<div class="area">
<label for="ipt-pwd-reg" class="l">密码</label>
<input required="required" id="ipt-pwd-reg" name="password" data-name="密码" data-length="6,32" data-direction="right" placeholder="请输入密码" class="password l" type="password">
<span class="clearfix"></span>
</div>
<div class="area">
<label for="ipt-repwd-reg" class="l">确认密码</label>
<input required="required" id="ipt-repwd-reg" name="password2" data-name="确认密码" data-length="6,32" data-direction="right" placeholder="确认密码" class="re-password l" type="password">
<span class="clearfix"></span>
</div>
<!-- <div class="area">
<label for="ipt-captcha-reg" class="l">验证码</label>
<input required="required" placeholder="请输入验证码" id="ipt-captcha-reg" autocomplete="off" name="captcha" data-name="验证码" data-direction="bottom" data-length="4,4" class="captcha l" type="text">
<img src="/captcha.svl" οnclick="this.src='/captcha.svl?d='+new Date()" class="captcha-pic"><span class="clearfix"></span>
</div> -->
<div>
<label for="ipt-priority-reg" class="l">账号权限</label>
<select name="priority">
<option value="controller">controller</option>
<option value="adder">adder</option>
<option value="member of group">member of group</option>
</select>
<!-- <input type='radio' name = 'priority' value = 'controller'/>controller
<input type='radio' name = 'priority' value = 'adder'/>adder
<input type='radio' name = 'priority' value = 'member'/>member of group
<input type='radio' name = 'priority' value = 'viewer'/>viewer -->
</div>
<div class="area-tool">
<input type = 'submit' value = '注册' />
<input type="reset" value="重置" />
<a href="/login.html">返回登录</a>
<span class="clearfix"></span>
</div>
</form>
</body>
</html>
网页:
这里通过与sql的交互实现了注册功能:
mysql> select * from regist;
+----------+----------+------------+
| username | password | priority |
+----------+----------+------------+
| wdd | 123 | adder |
| wdd123 | 123 | controller |
+----------+----------+------------+
2 rows in set (0.00 sec)
1.每注册一个用户就在sql中录入一条(username,password,priority)信息。其中username设为主键,这样适当的解决引发的主键冲突异常就可以避免账号的重复注册。
注册成功:
2.登录:
python代码:
@app.route('/login.html',methods = ['GET','POST'])
def login():
if request.method == 'POST':
username = request.form.get('username')
password = request.form.get('password')
try:
conn = MySQLdb.connect(host= "localhost",user = "root",passwd = "root",db = "myblog",charset='UTF8')
except Exception,e:
print e
sys.exit()
# 获取cursor对象来进行操作
cursor = conn.cursor()
#匹配账号密码优先权
sql = "select * from regist where username = '%s'" %(username)
cursor.execute(sql)
alldata = cursor.fetchall()
cursor.close()
conn.close()
if alldata:
if alldata[0][1] == password:
if alldata[0][2] == 'controller':
return render_template('controller.html')
elif alldata[0][2] == 'adder':
return render_template('adder.html')
elif alldata[0][2] == 'member of group':
return render_template('member of group.html')
else :
return render_template('index.html')
else:
return "密码错误!请重新登录"
else:
return '很抱歉,不存在这个账号,您可以注册它。'
else:
return render_template('login.html')
html代码:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<title>登录</title>
<meta name="keywords" content="登录" />
<meta name="description" content="登录页面、http://www.acfun.tv/login/" />
</head>
<body>
<form method="post" >
<h1 class="title">登录</h1>
<div class="area">
<label for="ipt-username-login" class="l">账号</label>
<input required="required" placeholder="请输入账号" id="ipt-username-reg" name="username" spellcheck="false" data-name="昵称" data-direction="right" data-length="2,10" class="name l" type="text">
<span class="clearfix"></span>
</div>
<div class="area">
<label for="ipt-pwd-reg" class="l">密码</label>
<input required="required" id="ipt-pwd-reg" name="password" data-name="密码" data-length="6,32" data-direction="right" placeholder="请输入密码" class="password l" type="password">
<span class="clearfix"></span>
</div>
<!-- <div class="area-tool">
<input type = 'submit' value = '注册' />
<input type="reset" value="重置" />
<a href="/login.html">返回登录</a>
<span class="clearfix"></span>
</div> -->
<div class="area-tool">
<input type = 'submit' value = '登录' />
<input type="reset" value="重置" />
<a href="/regist.html">注册账号</a>
</div>
</form>
<h3><a href="/">返回主页</a> </h3>
</body>
</html>
网页:
账号会与sql中的账号匹配,若没有怎会提示错误:
然后匹配密码,若不匹配怎提示错误:
然后根据'priority'属性的值转到不同的网页。
部分页面展示:
注:所做的网页内容并没有符合要求。照抄苏大官网只是因为方便展示,在网站完成后会修改为正确的内容。
现在github打不开。完成的代码稍后放在 github 上。