【9】Python接口開發:flask Demo實例


 

舉例1,返回當前時間接口

'''
初始化:所有的Flask都必須創建程序實例,
web服務器使用wsgi協議,把客戶端所有的請求都轉發給這個程序實例
程序實例是Flask的對象,一般情況下用如下方法實例化
Flask類只有一個必須指定的參數,即程序主模塊或者包的名字,__name__是系統變量,該變量指的是本py文件的文件名
'''
from flask import Flask
import datetime

server=Flask(__name__)

@server.route('/time',methods=['post','get'])
def get_time():
    now=str(datetime.datetime.now())#把當前時間轉換成字符串
    return "當前的時間是:%s"%now


server.run(port=8888)

 

執行后網頁顯示如下:

舉例2:怎樣跳轉到你的網站

1、先寫好一個HTML前端頁面(例如我隨便寫了一個index.html放在了當前路徑下)

 

2、寫接口,返回html前端頁面。

import flask

server=flask.Flask(__name__)

@server.route('/index')
def my_page():
    f=open('index.html',encoding='utf-8')
    res=f.read()
    f.close()
    return  res

server.run(port=8888)

 

 

3、執行后網頁顯示如下:

 

 

舉例3:登錄接口

flask獲取請求參數、連接數據庫

1、傳參
2、執行sql查數據庫(已有該表)
3、返回結果

import flask
import json
import tools

server=flask.Flask(__name__)

@server.route('/login',methods=['post'])
def login():
    #登錄需要兩個參數,name和pwd
    uname=flask.request.values.get('username')# 傳參,前面的是變量,括號里面是key
    passwd=flask.request.values.get('password')
    #args只能獲取到跟在url后面的參數,所以我們改用values

    if uname and passwd:# 非空為真
        # 需要先寫一個導入數據庫的函數,例如我寫了一個名稱為tools的函數(如圖),放在另一個python文件中,import tools進行調用。當然也可以直接寫在本python文件中,但是顯得會累贅。
        sql="SELECT * FROM app_myuser WHERE username='%s' AND passwd='%s';"%(uname,passwd)
        result = tools.my_db(sql)#執行sql
        if result:
            res={"error_code":1000,"mag":"登錄成功"}# 接口返回的都是json,所以要這樣寫。先導入json模塊,import json。
        else:
            res = {"error_code": 3001, "mag": "賬號或密碼錯誤!"}
    else:
        res={"error_code":3000,"mag":"必填參數未填,請查看接口文檔!"}

    return  json.dumps(res,ensure_ascii=False)#防止出現亂碼;json.dumps()函數是將字典轉化為字符串

server.run(port=8888)

 

操作數據庫的函數如圖:

import pymysql

def my_db(sql):
    conn=pymysql.connect(
        host='118.24.3.40',
        user='jxz',
        password='123456',
        db='jxz',
        charset='utf8',
        autocommit=True# 自動提交

    )
    cur=conn.cursor(cursor=pymysql.cursors.DictCursor)# 建立游標;默認返回二維數組,DictCursor指定返回字典;
    cur.execute(sql)#execute幫你執行sql
    res=cur.fetchall()#拿到全部sql執行結果
    cur.close()# 關閉游標
    conn.close()# 關閉數據庫
    return res # 返回sql執行的結果

 

 

調用接口服務如圖(借助postman):

 

 

舉例4:新增學生接口

flask獲取請求參數、連接數據庫;入參是json類型,參數有限制。

 

import flask
import json
import tools

server=flask.Flask(__name__)

@server.route('/add_student',methods=['post'])
def add_student():
    params=flask.request.json #入參是字典json時用它,下面的代碼要判斷傳入的參數是否是json類型
    if params:
        name=params.get('name')
        sex=params.get('sex','')# 如果沒有傳。默認值是男
        age=str(params.get('age'))# int
        addr=params.get('addr')
        grade=params.get('grade')
        phone=str(params.get('phone'))# 最少11位,不能重復
        gold=str(params.get('gold',500)) # 金幣可以是小數,如果沒有傳默認是500

        if name and age and addr and grade and phone:# 必填參數校驗

            if sex not in['','']: #如果性別不是男或者女
                res = {"error_code": 3003, "msg": "性別只能是男或者女"}
            elif not age.isdigit():# 如果不是整數類型
                res = {"error_code": 3004, "msg": "年齡輸入錯誤"}
            elif len(phone)!=11 or not phone.isdigit():
                res = {"error_code": 3005, "msg": "手機號輸入錯誤"}
            elif not gold.isdigit() and not tools.check.float(gold):#如果不是整數也不是小數
                res = {"error_code": 3006, "msg": "金幣輸入錯誤"}
            else:
                sql="select* from app_student where phone='%s';"%phone #查看數據庫中是否有這個手機號,有的話說明重復
                result = tools.my_db(sql)  # 執行sql
                if result:
                    res = {"error_code": 1000, "msg": "手機號已經存在"}
                else:
                    sql = "INSERT INTO app_student(NAME,sex,age,addr,grade,phone,gold)VALUES('%s','%s',%s,'%s','%s',%s,'%s')" % (
                        name, sex, age, addr, grade, phone, gold)
                    tools.my_db(sql)
                    res = {"error_code": 200, "msg": "新增成功! "}
        else:
            res = {"error_code": 3007, "msg": "必填參數未填寫"}
    else:
        res={"error_code":3002,"msg":"入參必須是json類型"}
    return  json.dumps(res,ensure_ascii=False)#防止出現亂碼

server.run(port=8888)

 

調用接口服務如圖(借助postman):

 

舉例5:上傳文件接口

上傳文件時加上當前日期

 

import flask
import json
import datetime

server=flask.Flask(__name__)

def file_upload():
    f=flask.request.files.get('wjm',None)# 上傳文件,取一個名字,再給名字一個默認值None
    if f:# 如果文件不為空
        cur_time=datetime.datetime.now().strftime("%Y%m%d%H%M%S")# 如果上傳同一個文件兩次,會被覆蓋,所以加一個當前日期,並指定日期格式strftime("%Y%m%d%H%M%S")
        new_file_name=cur_time+f.filename# 新文件名=時間+原來的文件名
        f.save(new_file_name)#保存文件
        res={"msg":"文件上傳成功"}
    else:
        res={"msg":"沒有上傳文件"}
    return  json.dumps(res,ensure_ascii=False)#防止出現亂碼

server.run(port=8888)

 

調用接口服務如圖(借助postman):

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM