第八周任务----Flask框架的学习

来源:互联网 发布:ntfs for mac.dmg 编辑:程序博客网 时间:2024/05/16 11:34

1.模板继承

当我们很多模板都包含同一个内容时,我们可以将相同的内容提出来做成一个模板,再让其他模板导入它即可。

<h1>Home</h1>{% block content %}{% endblock %}<h1>Hello!</h1></body></html>
这里假设我们创建了一个“a.html”模板,在这个模板中,我们使用 block 控制语句来定义派生模板可以插入的地方,然后我们再写一个“b.html”模板:

{% extends "a.html" %}{% block content %}<h1>Content!</h1>{% endblock %}
在这个模板中,我们使用extends语句来继承模板“a.html”,然后打开“b.html”我们就能看到这两个模板合在一起的内容了。


2.表单处理

一般网页都有登录功能,登录之前我们需要注册一个用户名,要实现注册的话我们就要给网页传递表单,处理方法:request对象和request.method。首先我们先写一个简单的带有注册功能的模板:

<html><head></head><body><h1>注册!</h1><form action=""   method="POST">用户名:<input type="text" name="username"/><br/>
密  码:<input type="password" name="password"><br/><input type="submit" name="commit"/></form></body></html>

打开模板之后我们就可以看到一个简单的注册网页了:


这时我们可以开始写一个注册程序了:

@app.route('/login/',methods=['GET','POST'])def works():    if request.method == 'POST':        return u'%s 注册成功!'%request.form['username']    else:        return render_template('login.html')


这段程序将会做一个这样的动作,如果用户给网页POST一个表单,那么程序将返回一个xxx注册成功的页面,其中request.form['username']取的是我们传递给网页的username,若是GET方法,则调用request.args['']方法;如果没做POST动作,网页将停留在注册页面。


3.数据库

教程大多用的数据库都是sqlite3,不过用Mysql也是一样,我这里用的数据库就是Mysql,上面我们写了简单的注册程序,并没有将用户名、密码保存下来,这下我们有了数据库,就可以真正的实现注册功能了:

@app.route('/regisit/',methods=['POST','GET'])def regisit():    if request.method == 'POST':        cxn = MySQLdb.connect(host='localhost', user='root', passwd='root',db='python')        username=request.form.get('username')        password=request.form.get('password')        con = cxn.cursor()        query="select username from data where  username='%s' " %username        con.execute(query)        existaccount=con.fetchall()        if not existaccount:            con.execute('insert into data values(%s,%s)',[username,password])            cxn.commit()            return u'%s 注册成功!'%request.form['username']        else:            return u'%s 被注册了,请重新选择用户名!'%request.form['username']    else:        return render_template('regisit.html')

这里我们使用request.form.get('')方法把用户输入的帐号取到,然后再数据库中搜索是否有相同的用户名被注册过了,若有则注册失败,若没有则注册成功,并将新的用户名和密码保存到数据库中。现在我们有了数据库并且储存了一些用户名和密码,接下来我们便可以实现登录功能了,方法跟注册差不多,这里不再赘述。





4.cookies

有了登录功能之后,我们便可以用cookie的方式把数据放在浏览器端进行保留:

response=make_response(redirect('/'))            response.set_cookie('username',value=username,max_age=360)            return response
这里我们生成了一个response对象,然后用response对象调用set_cookie的方法对我们需要的信息进行保留,set_cookie(key,value=,max_age=)是set_cookie的原型,key中填cookie的名字,value填对应的值,而max_age为cookie的有效期,这样调用了之后我们将response对象返回给浏览器,浏览器中就会保存这个cookie了,倘若想要获取该cookie保存的信息的话,我们可以调用request.cookie.get()的方法进行获取。



5.session

session将数据保存在服务器端,session的基本操作:

app.secret_key=os.urandom(24)
这里我们产生一段随机字符串来赋值给session,session不需要response对象,直接调用session['key']=value即可:

 session['username'] = username            return redirect('/new/')
做这样一个动作之后,我们打开浏览器就会看到Cookie中的session信息:


session中我们调用session.get()即可取到session中保存的信息了,以上我们通过cookie和session两种方法保存了用户的信息,若是用户想要注销呢?对于session方式,我们可以看出session是一个字典,只要按照字典的方法删除cookie即可;对于cookie方式,我们只需要改动max_age=0或者为负数,那么就成功注销了。


此时我们可以看到我们登录成功后响应cookie和请求cookie中均有session,然后我们点击注销:


点击注销后可以看到,响应cookie中的内容已经没有,说明已经注销成功。




0 0
原创粉丝点击