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

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值