ipython3
(互動式直譯器),進到 python 使用畫面import re
exit
import sqlite3,re
from flask import Flask,request,jsonify
#------regular expession----#
def check_platenum(car_data):
find=0
condition=['[A-Z]{3}\-[0-9]{4}','[A-Z]{3}-[0-9]{3}','[A-Z]{2}-[0-9]{3}',
'[0-9]{3}-[A-Z]{2}','[0-9]{2}-[A-Z]{2}','[0-9]{4}-[A-Z]{2}',
'[0-9]{3}-[A-Z]{3}','[0-9][A-Z]{2}-[0-9]{3}','[A-Z]{2}-[0-9]{2}']
platenum=car_data["platenum"]
for i in range(len(condition)):
res=re.search(condition[i],str(platenum))
try:
res.group()
find=1
break
except:
find=0;
return find
#------------sqlite---------#
def connect_db():
dbcon=sqlite3.connect('example.db')
return dbcon
def insert_db(car_data):
dbcon=connect_db()
cur=dbcon.cursor()
if check_platenum(car_data)==1:
cur.execute(
"INSERT INTO plate(platenum, carcolor, cartype) VALUES(?, ? ,?)",
(car_data['platenum'],car_data['carcolor'],car_data['cartype'])
)
dbcon.commit()
dbcon.close
return db_message(1)
else:
return db_message(0)
def show_db():#將所有的資料回傳
datas = []
try:
dbcon = connect_db()
dbcon.row_factory = sqlite3.Row
cur = dbcon.cursor()
cur.execute("SELECT * FROM plate")
rows = cur.fetchall()
for i in rows:
data = {}
data["platenum"] = i["platenum"]
data["carcolor"] = i["carcolor"]
data["cartype"] = i["cartype"]
datas.append(data)
except:
datas = []
return datas
def db_message(stasus):#response
msg=[]
de={}
if stasus==1:
de["State"]="1"
de["Message"]="Insert data successfully"
else:
de["State"]="0"
de["Message"]="Insert data failed,platenum type error"
msg.append(de)
return msg
#------------flask----------#
app=Flask(__name__)
@app.route('/carapi/insert',methods=[ 'POST',])
def insert_data():
car_data=request.get_json()
return jsonify(insert_db(car_data))
@app.route('/carapi/show',methods=['GET'])
def show_data():
return jsonify(show_db())
if __name__ == '__main__':
app.run(debug=True)
如果用 compile 時就要加 r
如果使用 re.search("pattern", "string"),這種方法就不用加 r" "
r = re.compile('(h)(i)')
m = r.match('hi...').group()
print(m)
regex 的跳脫字元跟原本的不一樣,要避免衝突
用以下例子說明 :
print(r'hello\nhello')
print('------------')
print('hello\nhello')
import re
regex1 = re.compile('\\^')
regex2 = re.compile(r'\\^')
string = '^'
print(regex1.search(string))
print(regex2.search(string))
URI : /api/tracks/<event_id>
: 想要獲取特定軌跡資料,可以透過 id
獲取為什麼獲取軌跡和新增軌跡網址一樣,而其中差別是GET和POST,會不會造成其誤解?
根據 RESTful 定義,網址透過簡白方式,可以使使用者易了解 api 網址的用處。
想要獲取軌跡的話,method 使用 GET ; 想要新增軌跡的話,method 改成 POST,就無需再寫一個新的網址。(網址太多使用起來不方便)同理,要刪除的話,method 改成 DELETE。
為什麼分析軌跡有兩個以上大括號
車型軌跡分析
,搜尋結果可能不只一個車牌號碼。
能否釐清一下, track 是指一張畫面,還是一串軌跡 (許多張畫面)?
track是指一張畫面
一張畫面叫「軌跡」很奇怪。要不要改名為 event ?一系列 event 串起來才叫 track.
改成event應該沒問題
另外「搜尋軌跡」並不會產生新資料,為什麼你們用 POST而非 GET?
若使用get不會使用body
Search
method 用 GET 即可。下次開會時間 : 3/4(六) 14:00
警局給的東西有些網頁開啟有亂碼
Set Character Encoding
-> Unicode(UTF-8)
冠伶 :
共用的目錄在 /home/OPEN
,就請 SQLite 小組建一下 table 囉 ~
我將大家都 "developer" 這個群組,並將 /home/OPEN 的 group 設為 developer,並將權限設為 drwxrwxr-x。
以上是我為達成目的,而使用的 command。