Python Web框架Flask下网站开发入门实例


Posted in Python onFebruary 08, 2015

一、Flask简介

Flask 是一个 Python 实现的 Web 开发微框架。官网:http://flask.pocoo.org/

二、Demo

1、代码结构

.

├── blog.py

├── static

│   ├── css

│   │   └── index.css

│   ├── images

│   │   ├── cat.jpg

│   │   └── sheying1229.jpg

│   └── js

└── templates

    ├── index.html

    ├── login.html

    ├── regist.html

    └── upload.html
5 directories, 8 files

2、主程序blog.py

#!/usr/bin/python

#coding:utf8
from flask import Flask, render_template, url_for, request,redirect,make_response,session

import os,MySQLdb
app = Flask(__name__)

app.secret_key='afjlsjfowflajflkajfkjfkaljf'

user_list = ['jim','max','py']
imagepath = os.path.join(os.getcwd(),"static/images")
@app.route('/')

def index():

    username = request.cookies.get('username')

    if not username:

        username = u'请先登录'

    islogin = session.get('islogin')

    nav_list = [u'首页',u'经济',u'文化',u'科技',u'娱乐']

    blog = {'title':'welcome to my blog','content':'hello, welcome to my blog.'}

    blogtag = {'javascript':10,"python":20,"shell":5}

    img = url_for('static', filename="images/cat.jpg")

    return render_template('index.html', nav_list=nav_list, username=username, blog = blog, blogtag = blogtag, img=img, islogin=islogin)
@app.route('/reg', methods=['GET','POST'])

def regist():

    if request.method == 'POST':

        username = request.form['username']

        conn = MySQLdb.connect(user='root',passwd='admin',host='127.0.0.1')

        conn.select_db('blog')

        curr = conn.cursor()

        sql = 'insert into `user` (`id`,`username`) values (%d,"%s")' % (1,username)

        curr.execute(sql)

        conn.commit()

        curr.close()

        conn.close()

        return "user %s regist ok!" % request.form['username']

    else:

        #request.args['username']

        return render_template('regist.html')
@app.route('/upload', methods=['GET','POST'])

def upload():

    if request.method == 'POST':

        username = request.form['username']

        file = request.files['img']

        filename = file.filename

        file.save(os.path.join(imagepath,filename))

        return "<img src='static/images/%s' alt=''/>" % filename

    else:

        return render_template('upload.html')
@app.route('/login/', methods=['GET','POST'])

def login():

    if request.method == 'POST':

        username = request.form.get('username')

        if username in user_list:

            response = make_response(redirect('/'))

            response.set_cookie('username', value=username, max_age=300)

            session['islogin'] = '1'

            return response

        else:

            session['islogin'] = '0'

            return redirect('/login/')

    else:

        return render_template('login.html')
if __name__ == '__main__':

    app.run(debug=True,host='0.0.0.0',port=5000)

主要有首页、注册、登录、上传页面。

blog.py主要是展示了Flask中常见功能用法:路由,数据库操作,cookie,session,redirect,表单,文件上传,调试,Web服务器的IP和端口,静态文件读取等。

3、首页模板index.html

<!DOCTYPE html>

<html>

<head>

    <meta charset="utf-8"/>

    <title>Flask DEMO</title>

    <link rel="stylesheet" type="text/css" href="static/css/index.css"/>

</head>

<body>

    <div class="header">

        {%if islogin == '1' %}

        <h1>Welcome ,{{username}}!</h1>

        {%else%}

        <h1>{{username}}!</h1>

        {%endif%}

        <div class="nav">

            <ul>

                {%for nav in nav_list%}

                <li><a href="{{nav}}">{{nav}}</a></li>

                {%endfor%}

            </ul>

        </div>

    </div>

    <div class="container">

        <div class="item">

            <h1>{{blog['title']}}</h1>

            <div class="content">

                <img src="/static/images/cat.jpg" alt="cat" />

                <p>{{blog['content']}}</p>

                <img src="{{img}}" alt="cat" />

            </div>

        </div>

        <div class="side">

            <ul>

                {%for key,value in blogtag.items()%}

                    <li>{{key}}({{value}})</li>

                {%endfor%}

            </ul>

        </div>

    </div>

</body>

</html>

这个模板主要展示了在Flask模板中如何读取各种类型的变量。

4、登录页面login.html

<!DOCTYPE html>

<html>

<head>

    <meta charset="utf-8"/>

    <title>Login</title>

    <link rel="stylesheet" type="text/css" href="static/css/index.css"/>

</head>

<body>

    <div class="header">

        <h1>Login</h1>

    </div>

    <div class="container">

        <div class="item">

            <form action="" method="post">

                <input type="text" placeholder="please input username" name="username" /><br/>

                <input type="submit" value="Login"/>

            </form>

        </div>

    </div>

</body>

</html>

结合blog.py主要展示表单如何提交取值,cookie和session应用。

5、注册页面regist.html

<!DOCTYPE html>

<html>

<head>

    <meta charset="utf-8"/>

    <title>Regist</title>

    <link rel="stylesheet" type="text/css" href="static/css/index.css"/>

</head>

<body>

    <div class="header">

        <h1>Regist</h1>

    </div>

    <div class="container">

        <div class="item">

            <form action="" method="post">

                <input type="text" placeholder="please input username" name="username" /><br/>

                <input type="submit" value="Regist"/>

            </form>

        </div>

    </div>

</body>

</html>

结合blog.py主要展示了数据库操作。

6、上传页面upload.html

<!DOCTYPE html>

<html>

<head>

    <meta charset="utf-8"/>

    <title>Upload</title>

    <link rel="stylesheet" type="text/css" href="static/css/index.css"/>

</head>

<body>

    <div class="header">

        <h1>Upload</h1>

    </div>

    <div class="container">

        <div class="item">

            <form action="" method="post" enctype="multipart/form-data">

                <input type="text" name="username" /><br/>

                <input type="file" name="img" /><br/>

                <input type="submit" value="Upload"/>

            </form>

        </div>

    </div>

</body>

</html>

结合blog.py主要展示了如何上传文件。

7、运行效果

Python Web框架Flask下网站开发入门实例

Python 相关文章推荐
采用python实现简单QQ单用户机器人的方法
Jul 03 Python
Python中处理字符串之endswith()方法的使用简介
May 18 Python
Windows下实现Python2和Python3两个版共存的方法
Jun 12 Python
python中获得当前目录和上级目录的实现方法
Oct 12 Python
python实现对指定字符串补足固定长度倍数截断输出的方法
Nov 15 Python
python样条插值的实现代码
Dec 17 Python
详解Python3之数据指纹MD5校验与对比
Jun 11 Python
解决Python安装时报缺少DLL问题【两种解决方法】
Jul 15 Python
python fuzzywuzzy模块模糊字符串匹配详细用法
Aug 29 Python
python 模拟创建seafile 目录操作示例
Sep 26 Python
Python+unittest+DDT实现数据驱动测试
Nov 30 Python
Python hashlib和hmac模块使用方法解析
Dec 08 Python
Python中使用wxPython开发的一个简易笔记本程序实例
Feb 08 #Python
Python常用的日期时间处理方法示例
Feb 08 #Python
Python中使用PIL库实现图片高斯模糊实例
Feb 08 #Python
Python中解析JSON并同时进行自定义编码处理实例
Feb 08 #Python
Python Web框架Flask中使用七牛云存储实例
Feb 08 #Python
Python Web框架Flask中使用百度云存储BCS实例
Feb 08 #Python
Python Web框架Flask中使用新浪SAE云存储实例
Feb 08 #Python
You might like
使用php发送有附件的电子邮件-(PHPMailer使用的实例分析)
2013/04/26 PHP
PHP使用ODBC连接数据库的方法
2015/07/18 PHP
php简单实现批量上传图片的方法
2016/05/09 PHP
ucenter中词语过滤原理分析
2016/07/13 PHP
php判断是否连接上网络的方法实例详解
2016/12/14 PHP
PHP字符串逆序排列实现方法小结【strrev函数,二分法,循环法,递归法】
2017/01/13 PHP
jQuery 拖动层(在可视区域范围内)
2012/05/24 Javascript
将数字转换成大写的人民币表达式的js函数
2014/09/21 Javascript
angularjs学习笔记之简单介绍
2015/09/26 Javascript
JQuery+Ajax实现数据查询、排序和分页功能
2015/09/27 Javascript
跟我学习javascript的函数和函数表达式
2015/11/16 Javascript
jQuery获取checkbox选中的值
2016/01/28 Javascript
轻松搞定jQuery.noConflict()
2016/02/15 Javascript
JavaScript代码因逗号不规范导致IE不兼容的问题
2016/02/25 Javascript
Javascript 闭包详解及实例代码
2016/11/30 Javascript
Vue.js实战之利用vue-router实现跳转页面
2017/04/01 Javascript
ES6中箭头函数的定义与调用方式详解
2017/06/02 Javascript
详解angular2如何手动点击特定元素上的点击事件
2018/10/16 Javascript
layui 实现二级弹窗弹出之后 关闭一级弹窗的方法
2019/09/18 Javascript
js实现拖动缓动效果
2020/01/13 Javascript
JavaScript使用setTimeout实现倒计时效果
2021/02/19 Javascript
[00:03]DOTA2新版本PA至宝展示
2014/11/19 DOTA
python和pyqt实现360的CLable控件
2014/02/21 Python
详解Python import方法引入模块的实例
2017/08/02 Python
Python删除n行后的其他行方法
2019/01/28 Python
Pytorch修改ResNet模型全连接层进行直接训练实例
2019/09/10 Python
Python中的上下文管理器相关知识详解
2019/09/19 Python
python实现的分层随机抽样案例
2020/02/25 Python
python剪切视频与合并视频的实现
2020/03/03 Python
20行代码教你用python给证件照换底色的方法示例
2021/02/05 Python
房产委托公证书
2014/04/08 职场文书
房产公证书范本
2014/04/10 职场文书
八年级地理课件资料及考点知识分享
2019/08/30 职场文书
Python 中的Sympy详细使用
2021/08/07 Python
php实现自动生成验证码的实例讲解
2021/11/17 PHP
MySQL表字段数量限制及行大小限制详情
2022/07/23 MySQL