Flask框架py解决跨域问题示例:

# -*- coding: utf- -*-
# by zhenghai.zhang from flask import Flask, render_template, jsonify, request
from flask_pymongo import PyMongo,DESCENDING
import datetime
import time app = Flask(__name__)
app.config['MONGO_DBNAME'] = 'service'
app.config['MONGO_URI'] = 'mongodb://xxx:27017/service'
mongo = PyMongo(app) def get_context():
return {
'success': True,
'message': '',
'code': ,
"data": [],
"count":
} @app.route('/', methods=["GET"])
def index():
return render_template("op.html") # /mongo?num=&page=&size=
@app.route('/mongo', methods=['GET','OPTIONS'])
def getmongodata(): # num = request.args.get('num', "")
page = request.args.get('page', "")
size = request.args.get('size', "")
rstart = request.args.get('startdate', "") # like ---::
rend = request.args.get('enddate', "") # like ---::
rdeviceid = request.args.get('deviceid', "") # like xxxx
ctx = get_context() if rstart =="" and rend == "":
endtts = int(time.time()*)
today = datetime.datetime.now()
delta = datetime.timedelta(days=)
start = today - delta
dt = start.strftime("%Y-%m-%d-%H:%M:%S")
timeArray = time.strptime(dt, "%Y-%m-%d-%H:%M:%S")
startts = int(time.mktime(timeArray)) *
else:
try:
startts = int(time.mktime(time.strptime(rstart, '%Y-%m-%d-%H:%M:%S'))*)
endtts = int(time.mktime(time.strptime(rend, '%Y-%m-%d-%H:%M:%S'))*)
# end1 = time.strptime(rend, '%Y-%m-%d-%H:%M:%S')
# end2 = datetime.datetime(end1.tm_year, end1.tm_mon, end1.tm_mday)
# delta1 = datetime.timedelta(days=)
# end3 = end2 + delta1
# endtts = int(time.mktime(end3.timetuple())*) except:
print("parameter is wrong!!!") collection = mongo.db['trace_log']
print(endtts, startts, page, size )
if rdeviceid == "":
results = collection.find({'sr': {'$gte': startts, '$lt': endtts}})\
.sort('sr', DESCENDING)\
.skip((int(page) - )*int(size))\
.limit(int(size))
ctx['count'] = collection.find({'sr': {'$gte': startts, '$lt': endtts}}).count() else:
results = collection.find({"$and":[{'sr': {'$gte': startts, '$lt': endtts}}, {"debug_log":{'$elemMatch':{"device_id": rdeviceid}}}]})\
.sort('sr', DESCENDING) \
.skip((int(page) - ) * int(size)) \
.limit(int(size))
ctx['count'] = collection.find({"$and":[{'sr': {'$gte': startts, '$lt': endtts}}, {"debug_log":{'$elemMatch':{"device_id": rdeviceid}}}]}).count() for res in results:
d = {}
annotation = res.get("annotation")
for anno in annotation:
if anno.get("name") == "asr":
debug_log = anno.get("debug_log")
asr = debug_log[].get("asr")
debug_log = res.get("debug_log")
debug_log0 = debug_log[]
session_id = debug_log0.get("session_id")
codec = debug_log0.get("codec")
if not session_id:
session_id = "" #超级无敌重要
wavfile = session_id + ".wav"
codecfile = session_id + "." + codec asrtimestr = session_id.split("-")[-]
st = time.localtime(float(asrtimestr))
asrtime = time.strftime("%Y-%m-%d %H:%M:%S", st)
asrthedate = time.strftime("%Y%m%d", st)
asrdeviceid = debug_log0.get("device_id")
asrdevicetype = debug_log0.get("device_type")
asrdevicekey = debug_log0.get("device_key") # print(asrtime,asrdeviceid,asrdevicekey,asrdevicetype,asr,file) d['asrtime'] = asrtime
d['asrthedate'] = asrthedate
d['asrdeviceid'] = asrdeviceid
d['asrdevicekey'] = asrdevicekey
d['asrdevicetype'] = asrdevicetype
d['asr'] = asr
d['wavfile'] = wavfile
d['codecfile'] = codecfile
d['codec'] = codec ctx['data'].append(d)
ctx['data'] = sorted(ctx['data'], key=lambda k: k['asrtime'], reverse=True) resp = jsonify(ctx)
resp.headers['Access-Control-Allow-Origin'] = '*'
resp.headers['Access-Control-Allow-Methods'] = 'POST'
resp.headers['Access-Control-Allow-Headers'] = 'x-requested-with,content-type'
return resp
if __name__ == '__main__':
app.run("0.0.0.0",port=)

Django框架views.py解决跨域问题示例:

from django.http import JsonResponse
from django.db import connection
import datetime
import time
import json def get_context():
return {
'errcode': 0,
'errmsg': '',
'data': []
} def ctxWraped(ctx):
response = JsonResponse(ctx)
response["Access-Control-Allow-Headers"] = "content-type"
response["Access-Control-Allow-Origin"] = "*"
response["Access-Control-Allow-Methods"] = "POST, GET, OPTIONS"
response["Access-Control-Max-Age"] = "1000"

return response # 获取每天语音交互数
def speechtrend(request): startdate = request.GET.get("startdate", "")
enddate = request.GET.get("enddate", "") if startdate == "" or enddate == "":
today = datetime.datetime.now()
delta = datetime.timedelta(days=30)
start = today - delta
startdate = start.strftime("%Y%m%d")
enddate = today.strftime("%Y%m%d") cursor = connection.cursor()
sql = "select thedate, sum(count) as count from dwb_speech_domain_d where thedate >= '"+startdate+"' and thedate < '"+enddate+"' group by thedate"
cursor.execute(sql) result = cursor.fetchall()
ctx = get_context()
ctx["namelist"] = []
ctx["namevalue"] = []
for rec in result:
record = {}
record["name"] = rec[0]
record["value"] = int(rec[1])
ctx["namelist"].append(rec[0])
ctx['data'].append(record)
ctx["namevalue"].append(int(rec[1]))
connection.close() return ctxWraped(ctx)

网站端JavaScript代码

ajax代码:

      let url = 'http://localhost:8000/product/speechdistinctsn/', self = this;
$.ajax({
type: 'GET',
async: true,
url: url,
dataType: 'json',
success: function (result) {
self.speechdistinctsnname = result.namelist;
self.speechdistinctsndata = result.namevalue;
self.drawSpeechDistinctSn('speechdistinctsn'); #echarts 渲染
},
error: function (errorMsg) {
console.log(errorMsg)
}
})

fetch代码:

        let url = 'http://localhost:8000/product/speechdomain/', self = this;
fetch(url, {
method: 'GET',
dataType: 'json',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
}
}).then(function(response) {
response.json().then(function (result) {
self.opinion = result.namelist;
self.opinionData = result.data;
self.drawGraph('main')
})
})

以上,网站+后端配合完美解决跨域问题。

参考文章

Django通过设置settings解决跨域问题:http://www.jianshu.com/p/1fd744512d83 PS:我自己试了N次发现不管用,不知道是姿势不对还是怎么着,

如有错误,还请各位大虾指教。

Python之Flask和Django框架解决跨域问题,配合附加ajax和fetch等js代码的更多相关文章

  1. Django框架 之 跨域请求伪造

    Django框架 之 跨域请求伪造 浏览目录 同源策略与Jsonp 同源策略 Jsonp jQuery对JSONP的实现 CORS 简介 两种请求 同源策略与Jsonp 同源策略 同源策略(Same ...

  2. 在django中解决跨域AJAX

    由于浏览器存在同源策略机制,同源策略阻止从一个源加载的文档或脚本获取另一个源加载的文档的属性. 特别的:由于同源策略是浏览器的限制,所以请求的发送和响应是可以进行,只不过浏览器不接收罢了. 浏览器同源 ...

  3. django中解决跨域问题

    -跨域问题 -浏览器的:同源策略,浏览器拒绝不是当前域域返回的数据 -ip地址和端口号都相同才是同一个域 -如何解决: -CORS:跨域资源共享 -简单请求:发一次请求 -非简单请求:非简单请求是发送 ...

  4. python bottle框架 解决跨域问题的正确方式

    经查询,网上有几种说法 https://www.cnblogs.com/EmptyFS/p/6138923.html 我首先查到的就是这个,我采用了文中所说的修改源码的方式, 但是经测试发现,修改源码 ...

  5. Django项目解决跨域问题

    在配置文件INSTALLED_APPS中添加: 'corsheaders', 在MIDDLEWARE中添加: 'corsheaders.middleware.CorsMiddleware', 最后添加 ...

  6. jeecg框架解决跨域问题

    controller层方法体中添加如下代码 response.setHeader("Access-Control-Allow-Origin", "*");res ...

  7. Django后端彻底解决跨域问题

    最近在接一个前后端分离的项目,后端使用的django-restframework,前端使用的Vue.后端跑起来后,发现前端在访问后端API时出了了跨域的问题. 类似如下报错: 关于跨域问题,之前这篇文 ...

  8. 如何用Nginx解决跨域问题

    一. 产生跨域的原因 1.浏览器限制 2.跨域 3.XHR(XMLHttpRequest)请求 二. 解决思路 解决跨域有多重,在这里主要讲用nginx解决跨域 1.JSONP 2.nginx代理 3 ...

  9. django框架进阶-解决跨域问题

    ####################################### """ 一.为什么会有跨域问题? 是因为浏览器的同源策略是对ajax请求进行阻拦了,但是不 ...

随机推荐

  1. 记录:js删除数组中某一项或几项的几种方法(转)

    1:js中的splice方法 splice(index,len,[item])    注释:该方法会改变原始数组. splice有3个参数,它也可以用来替换/删除/添加数组内某一个或者几个值 inde ...

  2. 【Spring】Spring之浅析Spring框架的搭建

    Spring是什么 Spring是一个开源的容器框架,用于配置bean并且维护bean之间关系的.其主要的思想就是IOC(Inversion Of Control,控制反转)或者称作DI(Depend ...

  3. 【Eclipse】Eclipse如何如何集成Tomcat服务器

    需要的环境 下载和配置JDK 读者可参见JDK的安装与配置 下载和配置Tomcat 读者可参见Tomcat的下载和配置 下载Eclipse 读者可参见Eclipse官方网站 Eclipse 4.4.0 ...

  4. .NET跨平台实践:用C#开发Linux守护进程-Daemon

    Linux守护进程(Daemon)是Linux的后台服务进程,它脱离了与控制终端的关联,直接由Linux init进程管理其生命周期,即使你关闭了控制台,daemon也能在后台正常工作. 一句话,为L ...

  5. Python学习笔记001——Linux

    Linux文件系统采用树形目录结构,系统中一切皆文件.文件名字母区分大小写 Linux命令使用格式(终端窗口) 命令名 [选项] [参数] 命令名:在命令行输入命令. 备注:命令名字母区分大小写, 1 ...

  6. SQLAlchemy(1) -- Python的SQLAlchemy和ORM

    Python的SQLAlchemy和ORM(object-relational mapping:对象关系映射) web编程中有一项常规任务就是创建一个有效的后台数据库.以前,程序员是通过写sql语句, ...

  7. C++项目參考解答:求Fibonacci数列

    [项目:求Fibonacci数列] Fibonacci数列在计算科学.经济学等领域中广泛使用,其特点是:第一.二个数是1,从第3个数開始,每一个数是其前两个数之和.据此,这个数列为:1 1 2 3 5 ...

  8. 如何在osx的终端下使用字典

    因为各种原因我经常要在osx上查英文单词,在osx系统下,查字典其实是一件非常优雅的事情,三指轻触,简单快速.在terminal中其实也是这样,3指轻触需要查询的单词,释义一触即发,用户体验非常好.不 ...

  9. STM32的JTAG下载模式

    SWJ:串行线JTAG配置 (Serial wire JTAG configuration)  SWJ(串行线JTAG)支持JTAG或SWD访问Cortex的调试端口. 系统复位后的默认状态是启用SW ...

  10. 缓存机制和Hibernate的缓存机制介绍

    缓存是介于应用程序和物理数据源之间,其作用是为了降低应用程序对物理数据源访问的频次,从而提高了应用的运行性能.缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事 ...