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 相关文章推荐
Python3实现的腾讯微博自动发帖小工具
Nov 11 Python
Flask的图形化管理界面搭建框架Flask-Admin的使用教程
Jun 13 Python
Python教程之全局变量用法
Jun 27 Python
Python 搭建Web站点之Web服务器与Web框架
Nov 06 Python
python 将字符串转换成字典dict的各种方式总结
Mar 23 Python
PyCharm鼠标右键不显示Run unittest的解决方法
Nov 30 Python
Python实现的爬取小说爬虫功能示例
Mar 30 Python
从0开始的Python学习016异常
Apr 08 Python
pytorch多GPU并行运算的实现
Sep 27 Python
python名片管理系统开发
Jun 18 Python
Python绘制散乱的点构成的图的方法
Apr 21 Python
Django框架模板用法详解
Jun 10 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编程之高级技巧——利用Mysql函数
2006/10/09 PHP
php检索或者复制远程文件的方法
2015/03/13 PHP
JavaScript中变量提升 Hoisting
2012/07/03 Javascript
基于JavaScript实现继承机制之调用call()与apply()的方法详解
2013/05/07 Javascript
浅析jquery的作用与优势
2013/12/02 Javascript
PHP PDO操作总结
2014/11/17 Javascript
node.js中的path.resolve方法使用说明
2014/12/08 Javascript
jQuery里filter()函数与find()函数用法分析
2015/06/24 Javascript
vue.js开发环境搭建教程
2017/05/04 Javascript
微信小程序对接七牛云存储的方法
2017/07/30 Javascript
关于Vue Webpack2单元测试示例详解
2017/08/14 Javascript
spirngmvc js传递复杂json参数到controller的实例
2018/03/29 Javascript
nodejs更新package.json中的dependencies依赖到最新版本的方法
2018/10/10 NodeJs
JavaScript实现电灯开关小案例
2020/03/30 Javascript
es6函数之尾递归用法实例分析
2020/04/25 Javascript
如何手写简易的 Vue Router
2020/10/10 Javascript
antd多选下拉框一行展示的实现方式
2020/10/31 Javascript
Python编写屏幕截图程序方法
2015/02/18 Python
深入讲解Python中面向对象编程的相关知识
2015/05/25 Python
详解python 拆包可迭代数据如tuple, list
2017/12/29 Python
python3实现zabbix告警推送钉钉的示例
2019/02/20 Python
Django 开发环境配置过程详解
2019/07/18 Python
python excel转换csv代码实例
2019/08/26 Python
Python序列对象与String类型内置方法详解
2019/10/22 Python
python实现高斯投影正反算方式
2020/01/17 Python
Keras 利用sklearn的ROC-AUC建立评价函数详解
2020/06/15 Python
HTML5 Canvas实现文本对齐的方法总结
2016/03/24 HTML / CSS
Notino瑞典:购买香水和美容产品
2019/07/26 全球购物
什么是GWT的Entry Point
2013/08/16 面试题
会计师事务所审计实习自我鉴定
2013/09/20 职场文书
外贸公司实习自我鉴定
2013/09/24 职场文书
2014政务公开实施方案
2014/02/19 职场文书
关于青春的演讲稿800字
2014/08/22 职场文书
房产授权委托书范本
2014/09/22 职场文书
房屋租赁协议书(标准版)
2014/10/02 职场文书
MySQL普通表如何转换成分区表
2022/05/30 MySQL