字符串是7種序列類型中的一種。
創(chuàng)新互聯(lián)一直秉承“誠信做人,踏實做事”的原則,不欺瞞客戶,是我們最起碼的底線! 以服務為基礎,以質(zhì)量求生存,以技術求發(fā)展,成交一個客戶多一個朋友!為您提供成都網(wǎng)站設計、網(wǎng)站建設、外貿(mào)網(wǎng)站建設、成都網(wǎng)頁設計、小程序制作、成都網(wǎng)站開發(fā)、成都網(wǎng)站制作、成都軟件開發(fā)、重慶APP開發(fā)公司是成都本地專業(yè)的網(wǎng)站建設和網(wǎng)站設計公司,等你一起來見證!
除了序列的操作函數(shù),比如len()來求字符串長度之外,Python還為字符串提供豐富到可以寫個編輯器的API.
首先,下面的查找API都是為了查找位置,或者查一共有幾次這樣的操作。
如果只是想判斷一個字符串是不是另一個字符串的子串的話,使用序列的in運算符就可以了。
例:
原型:str.count(sub[, start[, end]])
字符串的count函數(shù)可以數(shù)出來有多少次匹配,我們看個例子,有5個ha和3個hei
輸出為5和2.
haha只能匹配兩次。
再加上擴展參數(shù):
find函數(shù)的行為是,如果能找到,則返回在序列中的坐標,如果找不到,則返回-1. rfind是從右向左查找。我們來看例子:
輸出值為0和6.
找不到的例子:
輸出值都是-1.
完整形式:
index和rindex的功能與find和rfind基本上一致,除了在找不到時會拋出ValueError異常而不是返回-1.
例:
所以我們需要加try...except語句來處理之:
有時候,我們希望做從頭匹配或者匹配尾部。這時候就要用到startswith函數(shù)和endswith函數(shù)。例:
這兩個返回值均為True.
如果需要更復雜的匹配,還是需要正則表達式。與Java等語言不同,Python中的正則表達式有專門的模塊,字符串的API不負責這個事情。
1、說明
python可以調(diào)用win32的Api,是使用ctypes模塊就可以調(diào)用win32的API函數(shù)。
2、示例代碼
import ctypes
MessageBox = ctypes.windll.user32.MessageBoxW
MessageBox(None, '我是python,我使用了win32 API :)', '提示', 0)
3、執(zhí)行結果
4、注意事項
要注意函數(shù)使用的參數(shù),如果使用了帶中文的字符串,就是使用api中Unicode的函數(shù),如上例中使用的MessageBoxW,如為純ANSI編碼字符串則直接使用MessageBox即可。
調(diào)用API函數(shù)使用ctypes的windll對象下發(fā)命令可實現(xiàn)調(diào)用API函數(shù)的功能。API是用于構建應用程序軟件的一組子程序定義,協(xié)議和工具。一般來說,這是一套明確定義的各種軟件組件之間的通信方法。
用python很頭疼的一件事就是很難快速找到幫助文檔。
比如查找string類的所有方法。
說實話,這事我做了兩次,現(xiàn)在又忘記了string的文檔藏在哪個角落里了。
雖然 Python 需要為操作不同的數(shù)據(jù)庫使用不同的模塊,但不同的數(shù)據(jù)庫模塊并非沒有規(guī)律可循,因為它們基本都遵守 Python 制訂的 DB API 協(xié)議,目前該協(xié)議的最新版本是 2.0,因此這些數(shù)據(jù)庫模塊有很多操作其實都是相同的。下面先介紹不同數(shù)據(jù)庫模塊之間的通用內(nèi)容。
全局變量
Python 推薦支持 DB API 2.0 的數(shù)據(jù)庫模塊都應該提供如下 3 個全局變量:
apilevel:該全局變量顯示數(shù)據(jù)庫模塊的 API 版本號。對于支持 DB API 2.0 版本的數(shù)據(jù)庫模塊來說,該變量值通常就是 2.0。如果這個變量不存在,則可能該數(shù)據(jù)庫模塊暫時不支持 DB API 2.0。讀者應該考慮選擇使用支持該數(shù)據(jù)庫的其他數(shù)據(jù)庫模塊。
threadsafety:該全局變量指定數(shù)據(jù)庫模塊的線程安全等級,該等級值為 0~3 ,其中 3 代表該模塊完全是線程安全的;1 表示該模塊具有部分線程安全性,線程可以共享該模塊,但不能共享連接;0 則表示線程完全不能共享該模塊。
paramstyle:該全局變量指定當 SQL 語句需要參數(shù)時,可以使用哪種風格的參數(shù)。該變量可能返回如下變量值:
format:表示在 SQL 語句中使用 Python 標準的格式化字符串代表參數(shù)。例如,在程序中需要參數(shù)的地方使用 %s,接下來程序即可為這些參數(shù)指定參數(shù)值。
pyformat:表示在 SQL 語句中使用擴展的格式代碼代表參數(shù)。比如使用 %(name),這樣即可使用包含 key 為 name 的字典為該參數(shù)指定參數(shù)值。
qmark:表示在 SQL 語句中使用問號(?)代表參數(shù)。在 SQL 語句中有幾個參數(shù),全部用問號代替。
numeric:表示在 SQL 語句中使用數(shù)字占位符(:N)代表參數(shù)。例如:1 代表一個參數(shù),:2 也表示一個參數(shù),這些數(shù)字相當于參數(shù)名,因此它們不一定需要連續(xù)。
named:表示在 SQL 語句中使用命名占位符(:name)代表參數(shù)。例如 :name 代表一個參數(shù),:age 也表示一個參數(shù)。
通過查閱這些全局變量,即可大致了解該數(shù)據(jù)庫 API 模塊的對外的編程風格,至于該模塊內(nèi)部的實現(xiàn)細節(jié),完全由該模塊實現(xiàn)者負責提供,通常不需要開發(fā)者關心。
數(shù)據(jù)庫 API 的核心類
遵守 DB API 2.0 協(xié)議的數(shù)據(jù)庫模塊通常會提供一個 connect() 函數(shù),該函數(shù)用于連接數(shù)據(jù)庫,并返回數(shù)據(jù)庫連接對象。
數(shù)據(jù)庫連接對象通常會具有如下方法和屬性:
cursor(factory=Cursor):打開游標。
commit():提交事務。
rollback():回滾事務。
close():關閉數(shù)據(jù)庫連接。
isolation_level:返回或設置數(shù)據(jù)庫連接中事務的隔離級別。
in_transaction:判斷當前是否處于事務中。
上面第一個方法可以返回一個游標對象,游標對象是 Python DB API 的核心對象,該對象主要用于執(zhí)行各種 SQL 語句,包括 DDL、DML、select 查詢語句等。使用游標執(zhí)行不同的 SQL 語句返回不同的數(shù)據(jù)。
游標對象通常會具有如下方法和屬性:
execute(sql[, parameters]):執(zhí)行 SQL 語句。parameters 參數(shù)用于為 SQL 語句中的參數(shù)指定值。
executemany(sql, seq_of_parameters):重復執(zhí)行 SQL 語句。可以通過 seq_of_parameters 序列為 SQL 語句中的參數(shù)指定值,該序列有多少個元素,SQL 語句被執(zhí)行多少次。
executescript(sql_script):這不是 DB API 2.0 的標準方法。該方法可以直接執(zhí)行包含多條 SQL 語句的 SQL 腳本。
fetchone():獲取查詢結果集的下一行。如果沒有下一行,則返回 None。
fetchmany(size=cursor.arraysize):返回查詢結果集的下 N 行組成的列表。如果沒有更多的數(shù)據(jù)行,則返回空列表。
fetchall():返回查詢結果集的全部行組成的列表。
close():關閉游標。
rowcount:該只讀屬性返回受 SQL 語句影響的行數(shù)。對于 executemany() 方法,該方法所修改的記錄條數(shù)也可通過該屬性獲取。
lastrowid:該只讀屬性可獲取最后修改行的 rowid。
arraysize:用于設置或獲取 fetchmany() 默認獲取的記錄條數(shù),該屬性默認為 1。有些數(shù)據(jù)庫模塊沒有該屬性。
description:該只讀屬性可獲取最后一次查詢返回的所有列的信息。
connection:該只讀屬性返回創(chuàng)建游標的數(shù)據(jù)庫連接對象。有些數(shù)據(jù)庫模塊沒有該屬性。
總結來看,Python 的 DB API 2.0 由一個 connect() 開始,一共涉及數(shù)據(jù)庫連接和游標兩個核心 API。它們的分工如下:
數(shù)據(jù)庫連接:用于獲取游標、控制事務。
游標:執(zhí)行各種 SQL 語句。
掌握了上面這些 API 之后,接下來可以大致歸納出 Python DB API 2.0 的編程步驟。
操作數(shù)據(jù)庫的基本流程
使用 Python DB API 2.0 操作數(shù)據(jù)庫的基本流程如下:
調(diào)用 connect() 方法打開數(shù)據(jù)庫連接,該方法返回數(shù)據(jù)庫連接對象。
通過數(shù)據(jù)庫連接對象打開游標。
使用游標執(zhí)行 SQL 語句(包括 DDL、DML、select 查詢語句等)。如果執(zhí)行的是查詢語句,則處理查詢數(shù)據(jù)。
關閉游標。
關閉數(shù)據(jù)庫連接。
下圖顯示了使用 Python DB API 2.0 操作數(shù)據(jù)庫的基本流程。
使用 Python 和 Flask 設計 RESTful API
近些年來 REST (REpresentational State Transfer) 已經(jīng)變成了 web services 和 web APIs 的標配。
在本文中我將向你展示如何簡單地使用 Python 和 Flask 框架來創(chuàng)建一個 RESTful 的 web service。
什么是 REST?
六條設計規(guī)范定義了一個 REST 系統(tǒng)的特點:
客戶端-服務器: 客戶端和服務器之間隔離,服務器提供服務,客戶端進行消費。
無狀態(tài): 從客戶端到服務器的每個請求都必須包含理解請求所必需的信息。換句話說, 服務器不會存儲客戶端上一次請求的信息用來給下一次使用。
可緩存: 服務器必須明示客戶端請求能否緩存。
分層系統(tǒng): 客戶端和服務器之間的通信應該以一種標準的方式,就是中間層代替服務器做出響應的時候,客戶端不需要做任何變動。
統(tǒng)一的接口: 服務器和客戶端的通信方法必須是統(tǒng)一的。
按需編碼: 服務器可以提供可執(zhí)行代碼或腳本,為客戶端在它們的環(huán)境中執(zhí)行。這個約束是唯一一個是可選的。
什么是一個 RESTful 的 web service?
REST 架構的最初目的是適應萬維網(wǎng)的 HTTP 協(xié)議。
RESTful web services 概念的核心就是“資源”。 資源可以用?URI?來表示。客戶端使用 HTTP 協(xié)議定義的方法來發(fā)送請求到這些 URIs,當然可能會導致這些被訪問的”資源“狀態(tài)的改變。
HTTP 標準的方法有如下:
========== ?===================== ?==================================
HTTP 方法 ? 行為 ? ? ? ? ? ? ? ? ? 示例
========== ?===================== ?==================================
GET ? ? ? ? 獲取資源的信息 ? ? ? ?
GET ? ? ? ? 獲取某個特定資源的信息
POST ? ? ? ?創(chuàng)建新資源 ? ? ? ? ? ?
PUT ? ? ? ? 更新資源 ? ? ? ? ? ? ?
DELETE ? ? ?刪除資源 ? ? ? ? ? ? ?
========== ?====================== ==================================
REST 設計不需要特定的數(shù)據(jù)格式。在請求中數(shù)據(jù)可以以?JSON?形式, 或者有時候作為 url 中查詢參數(shù)項。
設計一個簡單的 web service
堅持 REST 的準則設計一個 web service 或者 API 的任務就變成一個標識資源被展示出來以及它們是怎樣受不同的請求方法影響的練習。
比如說,我們要編寫一個待辦事項應用程序而且我們想要為它設計一個 web service。要做的第一件事情就是決定用什么樣的根 URL 來訪問該服務。例如,我們可以通過這個來訪問:
http://[hostname]/todo/api/v1.0/
在這里我已經(jīng)決定在 URL 中包含應用的名稱以及 API 的版本號。在 URL 中包含應用名稱有助于提供一個命名空間以便區(qū)分同一系統(tǒng)上的其它服務。在 URL 中包含版本號能夠幫助以后的更新,如果新版本中存在新的和潛在不兼容的功能,可以不影響依賴于較舊的功能的應用程序。
下一步驟就是選擇將由該服務暴露(展示)的資源。這是一個十分簡單地應用,我們只有任務,因此在我們待辦事項中唯一的資源就是任務。
我們的任務資源將要使用 HTTP 方法如下:
========== ?=============================================== ?=============================
HTTP 方法 ? URL ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?動作
========== ?=============================================== ?==============================
GET ? ? ? ? http://[hostname]/todo/api/v1.0/tasks ? ? ? ? ? ?檢索任務列表
GET ? ? ? ? http://[hostname]/todo/api/v1.0/tasks/[task_id] ?檢索某個任務
POST ? ? ? ?http://[hostname]/todo/api/v1.0/tasks ? ? ? ? ? ?創(chuàng)建新任務
PUT ? ? ? ? http://[hostname]/todo/api/v1.0/tasks/[task_id] ?更新任務
DELETE ? ? ?http://[hostname]/todo/api/v1.0/tasks/[task_id] ?刪除任務
========== ?================================================ =============================
我們定義的任務有如下一些屬性:
id: 任務的唯一標識符。數(shù)字類型。
title: 簡短的任務描述。字符串類型。
description: 具體的任務描述。文本類型。
done: 任務完成的狀態(tài)。布爾值。
目前為止關于我們的 web service 的設計基本完成。剩下的事情就是實現(xiàn)它!
Flask 框架的簡介
如果你讀過?Flask Mega-Tutorial 系列,就會知道 Flask 是一個簡單卻十分強大的 Python web 框架。
在我們深入研究 web services 的細節(jié)之前,讓我們回顧一下一個普通的 Flask Web 應用程序的結構。
我會首先假設你知道 Python 在你的平臺上工作的基本知識。 我將講解的例子是工作在一個類 Unix 操作系統(tǒng)。簡而言之,這意味著它們能工作在 Linux,Mac OS X 和 Windows(如果你使用Cygwin)。 如果你使用 Windows 上原生的 Python 版本的話,命令會有所不同。
讓我們開始在一個虛擬環(huán)境上安裝 Flask。如果你的系統(tǒng)上沒有 virtualenv,你可以從?上下載:
$ mkdir todo-api
$ cd todo-api
$ virtualenv flask
New python executable in flask/bin/python
Installing setuptools............................done.
Installing pip...................done.
$ flask/bin/pip install flask
既然已經(jīng)安裝了 Flask,現(xiàn)在開始創(chuàng)建一個簡單地網(wǎng)頁應用,我們把它放在一個叫 app.py 的文件中:
#!flask/bin/pythonfrom flask import Flaskapp = Flask(__name__)@app.route('/')def index():
return "Hello, World!"if __name__ == '__main__':
app.run(debug=True)
為了運行這個程序我們必須執(zhí)行 app.py:
$ chmod a+x app.py
$ ./app.py
* Running on
* Restarting with reloader
現(xiàn)在你可以啟動你的網(wǎng)頁瀏覽器,輸入??看看這個小應用程序的效果。
簡單吧?現(xiàn)在我們將這個應用程序轉(zhuǎn)換成我們的 RESTful service!
使用 Python 和 Flask 實現(xiàn) RESTful services
使用 Flask 構建 web services 是十分簡單地,比我在?Mega-Tutorial?中構建的完整的服務端的應用程序要簡單地多。
在 Flask 中有許多擴展來幫助我們構建 RESTful services,但是在我看來這個任務十分簡單,沒有必要使用 Flask 擴展。
我們 web service 的客戶端需要添加、刪除以及修改任務的服務,因此顯然我們需要一種方式來存儲任務。最直接的方式就是建立一個小型的數(shù)據(jù)庫,但是數(shù)據(jù)庫并不是本文的主體。學習在 Flask 中使用合適的數(shù)據(jù)庫,我強烈建議閱讀?Mega-Tutorial。
這里我們直接把任務列表存儲在內(nèi)存中,因此這些任務列表只會在 web 服務器運行中工作,在結束的時候就失效。 這種方式只是適用我們自己開發(fā)的 web 服務器,不適用于生產(chǎn)環(huán)境的 web 服務器, 這種情況一個合適的數(shù)據(jù)庫的搭建是必須的。
我們現(xiàn)在來實現(xiàn) web service 的第一個入口:
#!flask/bin/pythonfrom flask import Flask, jsonifyapp = Flask(__name__)tasks = [
{
?'id': 1,
?'title': u'Buy groceries',
?'description': u'Milk, Cheese, Pizza, Fruit, Tylenol',
?'done': False
},
{
?'id': 2,
?'title': u'Learn Python',
?'description': u'Need to find a good Python tutorial on the web',
?'done': False
}]@app.route('/todo/api/v1.0/tasks', methods=['GET'])def get_tasks():
return jsonify({'tasks': tasks})if __name__ == '__main__':
app.run(debug=True)
正如你所見,沒有多大的變化。我們創(chuàng)建一個任務的內(nèi)存數(shù)據(jù)庫,這里無非就是一個字典和數(shù)組。數(shù)組中的每一個元素都具有上述定義的任務的屬性。
取代了首頁,我們現(xiàn)在擁有一個 get_tasks 的函數(shù),訪問的 URI 為 /todo/api/v1.0/tasks,并且只允許 GET 的 HTTP 方法。
這個函數(shù)的響應不是文本,我們使用 JSON 數(shù)據(jù)格式來響應,F(xiàn)lask 的 jsonify 函數(shù)從我們的數(shù)據(jù)結構中生成。
使用網(wǎng)頁瀏覽器來測試我們的 web service 不是一個最好的注意,因為網(wǎng)頁瀏覽器上不能輕易地模擬所有的 HTTP 請求的方法。相反,我們會使用 curl。如果你還沒有安裝 curl 的話,請立即安裝它。
通過執(zhí)行 app.py,啟動 web service。接著打開一個新的控制臺窗口,運行以下命令:
$ curl -i
HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 294
Server: Werkzeug/0.8.3 Python/2.7.3
Date: Mon, 20 May 2013 04:53:53 GMT
{
"tasks": [
{
"description": "Milk, Cheese, Pizza, Fruit, Tylenol",
"done": false,
"id": 1,
"title": "Buy groceries"
},
{
"description": "Need to find a good Python tutorial on the web",
"done": false,
"id": 2,
"title": "Learn Python"
}
]
}
我們已經(jīng)成功地調(diào)用我們的 RESTful service 的一個函數(shù)!
現(xiàn)在我們開始編寫 GET 方法請求我們的任務資源的第二個版本。這是一個用來返回單獨一個任務的函數(shù):
from flask import abort@app.route('/todo/api/v1.0/tasks/int:task_id', methods=['GET'])def get_task(task_id):
task = filter(lambda t: t['id'] == task_id, tasks)
if len(task) == 0:
?abort(404)
return jsonify({'task': task[0]})
第二個函數(shù)有些意思。這里我們得到了 URL 中任務的 id,接著 Flask 把它轉(zhuǎn)換成 函數(shù)中的 task_id 的參數(shù)。
我們用這個參數(shù)來搜索我們的任務數(shù)組。如果我們的數(shù)據(jù)庫中不存在搜索的 id,我們將會返回一個類似 404 的錯誤,根據(jù) HTTP 規(guī)范的意思是 “資源未找到”。
如果我們找到相應的任務,那么我們只需將它用 jsonify 打包成 JSON 格式并將其發(fā)送作為響應,就像我們以前那樣處理整個任務集合。
調(diào)用 curl 請求的結果如下:
$ curl -i
HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 151
Server: Werkzeug/0.8.3 Python/2.7.3
Date: Mon, 20 May 2013 05:21:50 GMT
{
"task": {
"description": "Need to find a good Python tutorial on the web",
"done": false,
"id": 2,
"title": "Learn Python"
}
}
$ curl -i
HTTP/1.0 404 NOT FOUND
Content-Type: text/html
Content-Length: 238
Server: Werkzeug/0.8.3 Python/2.7.3
Date: Mon, 20 May 2013 05:21:52 GMT
!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"
title404 Not Found/title
h1Not Found/h1
pThe requested URL was not found on the server./ppIf you ? ? entered the URL manually please check your spelling and try again./p
當我們請求 id #2 的資源時候,我們獲取到了,但是當我們請求 #3 的時候返回了 404 錯誤。有關錯誤奇怪的是返回的是 HTML 信息而不是 JSON,這是因為 Flask 按照默認方式生成 404 響應。由于這是一個 Web service 客戶端希望我們總是以 JSON 格式回應,所以我們需要改善我們的 404 錯誤處理程序:
from flask import make_response@app.errorhandler(404)def not_found(error):
return make_response(jsonify({'error': 'Not found'}), 404)
我們會得到一個友好的錯誤提示:
$ curl -i
HTTP/1.0 404 NOT FOUND
Content-Type: application/json
Content-Length: 26
Server: Werkzeug/0.8.3 Python/2.7.3
Date: Mon, 20 May 2013 05:36:54 GMT
{
"error": "Not found"
}
接下來就是 POST 方法,我們用來在我們的任務數(shù)據(jù)庫中插入一個新的任務:
from flask import request@app.route('/todo/api/v1.0/tasks', methods=['POST'])def create_task():
if not request.json or not 'title' in request.json:
?abort(400)
task = {
?'id': tasks[-1]['id'] + 1,
?'title': request.json['title'],
?'description': request.json.get('description', ""),
?'done': False
}
tasks.append(task)
return jsonify({'task': task}), 201
添加一個新的任務也是相當容易地。只有當請求以 JSON 格式形式,request.json 才會有請求的數(shù)據(jù)。如果沒有數(shù)據(jù),或者存在數(shù)據(jù)但是缺少 title 項,我們將會返回 400,這是表示請求無效。
接著我們會創(chuàng)建一個新的任務字典,使用最后一個任務的 id + 1 作為該任務的 id。我們允許 description 字段缺失,并且假設 done 字段設置成 False。
我們把新的任務添加到我們的任務數(shù)組中,并且把新添加的任務和狀態(tài) 201 響應給客戶端。
使用如下的 curl 命令來測試這個新的函數(shù):
$ curl -i -H "Content-Type: application/json" -X POST -d '{"title":"Read a book"}'
HTTP/1.0 201 Created
Content-Type: application/json
Content-Length: 104
Server: Werkzeug/0.8.3 Python/2.7.3
Date: Mon, 20 May 2013 05:56:21 GMT
{
"task": {
"description": "",
"done": false,
"id": 3,
"title": "Read a book"
}
}
注意:如果你在 Windows 上并且運行 Cygwin 版本的 curl,上面的命令不會有任何問題。然而,如果你使用原生的 curl,命令會有些不同:
curl -i -H "Content-Type: application/json" -X POST -d "{"""title""":"""Read a book"""}"
當然在完成這個請求后,我們可以得到任務的更新列表:
$ curl -i
HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 423
Server: Werkzeug/0.8.3 Python/2.7.3
Date: Mon, 20 May 2013 05:57:44 GMT
{
"tasks": [
{
"description": "Milk, Cheese, Pizza, Fruit, Tylenol",
"done": false,
"id": 1,
"title": "Buy groceries"
},
{
"description": "Need to find a good Python tutorial on the web",
"done": false,
"id": 2,
"title": "Learn Python"
},
{
"description": "",
"done": false,
"id": 3,
"title": "Read a book"
}
]
}
剩下的兩個函數(shù)如下所示:
@app.route('/todo/api/v1.0/tasks/int:task_id', methods=['PUT'])def update_task(task_id):
task = filter(lambda t: t['id'] == task_id, tasks)
if len(task) == 0:
?abort(404)
if not request.json:
?abort(400)
if 'title' in request.json and type(request.json['title']) != unicode:
?abort(400)
if 'description' in request.json and type(request.json['description']) is not unicode:
?abort(400)
網(wǎng)頁標題:Python中API函數(shù),python開發(fā)api接口
轉(zhuǎn)載來源:http://vcdvsql.cn/article38/heocsp.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供動態(tài)網(wǎng)站、定制網(wǎng)站、App開發(fā)、營銷型網(wǎng)站建設、Google、用戶體驗
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)