feat: 可儲存課表至DB
This commit is contained in:
parent
abc04f2e2b
commit
62a1a63ff1
16
api.py
16
api.py
@ -52,6 +52,22 @@ def get():
|
||||
else:
|
||||
return '{"status": "error access code"}', 403
|
||||
|
||||
@app.route('/courseTable', methods=["POST"])
|
||||
def save():
|
||||
# 先驗證 access code 是否正確
|
||||
jsonData = request.get_json()
|
||||
|
||||
status, uid, name = facebookAuth(jsonData['token'])
|
||||
|
||||
if status:
|
||||
with sqlite3.connect('data.db') as conn:
|
||||
sql = "UPDATE `courseTables` SET `json`=? WHERE `uid`=?"
|
||||
conn.execute(sql, [json.dumps(jsonData['data'], ensure_ascii=False), uid])
|
||||
conn.commit()
|
||||
return '{"status": "saved"}', 200
|
||||
else:
|
||||
return '{"status": "error access code"}', 403
|
||||
|
||||
if __name__ == '__main__':
|
||||
app.debug = True
|
||||
app.run(host='0.0.0.0')
|
||||
|
||||
@ -35,9 +35,6 @@
|
||||
<li class="nav-item mx-0 mx-lg-1">
|
||||
<div class="fb-login-button" data-width="" data-size="small" data-button-type="login_with" data-layout="rounded" data-auto-logout-link="true" data-use-continue-as="true"></div>
|
||||
</li>
|
||||
<li class="nav-item mx-0 mx-lg-1">
|
||||
<button v-on:click="selectDepartment='123'">test</button>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
@ -54,6 +51,9 @@
|
||||
<div class="divider-custom-icon"><i class="fas fa-star"></i></div>
|
||||
<div class="divider-custom-line"></div>
|
||||
</div>
|
||||
<div class="divider-custom">
|
||||
<div class=><button class="btn btn-info" @click="saveCourseTable()">儲存</button></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-lg-3">
|
||||
<div class="row">
|
||||
|
||||
45
js/index.vue
45
js/index.vue
@ -6,6 +6,7 @@ var vm = new Vue({
|
||||
'departments': [],
|
||||
'selectDepartment': '',
|
||||
'foundName': "",
|
||||
'token': ""
|
||||
},
|
||||
created() {
|
||||
window.fbAsyncInit = function() {
|
||||
@ -17,7 +18,7 @@ var vm = new Vue({
|
||||
});
|
||||
|
||||
FB.AppEvents.logPageView();
|
||||
vm.checkLogin()
|
||||
vm.getCourseTable()
|
||||
};
|
||||
|
||||
(function(d, s, id){
|
||||
@ -46,17 +47,15 @@ var vm = new Vue({
|
||||
})
|
||||
},
|
||||
methods: {
|
||||
'checkLogin': function(){
|
||||
console.log("check login")
|
||||
'getCourseTable': function(){
|
||||
FB.getLoginStatus(function(response) {
|
||||
vm.statusChangeCallback(response);
|
||||
});
|
||||
},
|
||||
'statusChangeCallback': function(response){
|
||||
console.log(response)
|
||||
if(response.status == "connected"){
|
||||
console.log("https://api.snsd0805.com/courseTable?token="+response.authResponse.accessToken)
|
||||
fetch('https://api.snsd0805.com/courseTable?token='+response.authResponse.accessToken)
|
||||
this.token = response.authResponse.accessToken
|
||||
fetch('https://api.snsd0805.com/courseTable?token='+this.token)
|
||||
.then(function(response){
|
||||
return response.json()
|
||||
}).then(function(jsonData){
|
||||
@ -65,6 +64,40 @@ var vm = new Vue({
|
||||
.catch(function(err){
|
||||
alert("錯誤: "+err)
|
||||
})
|
||||
}else{
|
||||
|
||||
}
|
||||
},
|
||||
'saveCourseTable': function(){
|
||||
if(this.token!=""){
|
||||
fetch('https://api.snsd0805.com/courseTable',{
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify({
|
||||
'token': vm.token,
|
||||
'data': vm.selectCourses
|
||||
})
|
||||
})
|
||||
.then(function(response){
|
||||
return response.json()
|
||||
})
|
||||
.then(function(response){
|
||||
if(response.status=="saved"){
|
||||
alert("已儲存")
|
||||
}else{
|
||||
alert("錯誤")
|
||||
}
|
||||
})
|
||||
.catch(function(err){
|
||||
alert("錯誤: "+err)
|
||||
})
|
||||
|
||||
}else{
|
||||
FB.login(function(response){
|
||||
vm.getCourseTable()
|
||||
})
|
||||
}
|
||||
},
|
||||
'getTime': function(timeString){
|
||||
|
||||
Loading…
Reference in New Issue
Block a user