提升開發效率:當更改代碼後,不重啓服務器就能使用新效果php
參考連接:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001432339228196a8eb6fb8832b48b5aa0d740346536ead000css
錯誤:html
解決辦法:vue
if __name__ == '__main__': argv = sys.argv[1:] if not argv: print('Usage: ./pymonitor your-script.py') exit(0) if argv[0] != 'python3': argv.insert(0, 'python3') command = argv path = os.path.abspath('.') start_watch(path, None) #替換爲 if __name__ == '__main__': argv = sys.argv[1:] if not argv: print('Usage: ./pymonitor your-script.py') exit(0) if argv[0] != 'python': # 這裏用python不要用python3除非你的系統也是用python3 XX.PY來啓動python程序的 argv.insert(0, 'python') command = argv path = os.path.abspath('.') start_watch(path, None)
能在請求處理程序中返回htmlpython
參考連接:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001432339095180ce91c53cdab841bfa9c342a297b886fe000mysql
@get('/') def index(request): users = yield from User.findAll()#查詢全部用戶信息,用於接下來輸出 return { '__template__': 'test.html', 'users': users } #下面是全部的test.html的代碼 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>Test users - Awesome Python Webapp</title> </head> <body> <h1>All users</h1> {% for u in users %} <p>{{ u.name }} / {{ u.email }}</p> {% endfor %} </body> </html>
當用戶在上面的輸入框中鍵入字符時,會執行函數 "showHint()" 。該函數由 "onkeyup" 事件觸發jquery
參考連接:https://www.w3cschool.cn/ajax/ajax-asp-php.htmlweb
錯誤:ajax
在用getElementById等尋找元素時,必定要讓元素在<script>的上面sql
<!DOCTYPE html> <html> <body> <p> JavaScript 可以直接寫入 HTML 輸出流中: </p> <h1 id="demo"> 您只能在 HTML 輸出流中使用 <strong>document.write</strong>。 若是您在文檔已加載後使用它(好比在函數中),會覆蓋整個文檔。 </h1> <script> x=document.getElementById("demo"); // 找到元素 x.innerHTML="Hello JavaScript!"; document.write("<h1>This is a heading</h1>"); document.write("<p>This is a paragraph.</p>"); </script> </body> </html>
原來它纔是要找的內容
var x=document.getElementById("myDiv").innerHTML 不是 var x=document.getElementById("myDiv")#是[object NodeList]
#######################注意:有時要加s好比用name查找時 也不是 var x=document.getElementById("myDiv").value#會顯示未定義這是對於元素,對於input不是這樣
x=document.getElementById("demo") //查找元素 x.innerHTML="Hello JavaScript"; //改變內容
alert("ss")
typeof x == "string"
data['name'] = $('#name').val()
js獲取input內容:https://blog.csdn.net/widenstage/article/details/68938975
<form id="form1"> <table border="0"> <tr> <td> 姓名: </td> <td> <input id="name" name="name" type="text" /> </td> </tr> </table> </form> function readtext() { // 方法一 var name = document.getElementById("name").value; alert(name); // 方法二 name = form1.name.value; alert(name); // 方法三 jquery name = $("#name").val(); alert(name); // 方法四 jquery name = $("input[id='name']").val(); alert(name); // 方法五 jquery name = $("#name").attr("value"); alert(name); // 方法六 jquery name = $("input[id='name']").attr("value"); alert(name); }
沒反應時右上角會有紅叉號顯示錯誤
而後點擊下圖右上角會定位
沒反應時右上角會有紅叉號顯示錯誤
http://www.runoob.com/python/python-cgi.html、
JSON.stringify()
方法是將一個JavaScript值(對象或者數組)轉換爲一個 JSON字符串
錯誤:
服務器是顯示:
405是方法不被容許,202是服務器接受請求但沒處理,通過查詢引發405的緣由有:提交方式的類型錯誤,post請求對應的是get方法處理,或者是明確指定「content-type」,通過認真檢查,發現是handler中的處理程序有重名的,修更名稱,完成,最後我知道了這個狀態碼的解決辦法,必定是請求處理程序沒有綁定好的緣由,至因而那種緣由,只能慢慢找了,畢竟,我也沒想到,居然會寫出重名的函數
參考連接:
https://blog.csdn.net/yiifaa/article/details/80928487
https://blog.csdn.net/qq_35804654/article/details/77272304
form的這些屬性須要有,差點忘了
<form action="/signin" method="post">
序列化表單值:jQuery ajax - serialize() 方法
參考連接:http://www.w3school.com.cn/jquery/ajax_serialize.asp
注意表單值的名稱
flask經常使用庫:https://www.jianshu.com/p/584fbff16946
關於這個ajax與後臺交互,我在這個問題上停留了超過一天的時間,由於沒有系統性的學習,致使遇到大多數問題,都只能按照錯誤去網上找教程來解決,而不是碰見問題分析問題,此次依舊,期間經歷了好屢次失敗,包括問了同窗也沒有解決,最後在一篇曾經看到過的博客上發現瞭解決辦法
這一慘痛的教訓給我留下了深入的影響,在遇到問題時,必定多看些解決辦法,不能找到幾篇詳細閱讀,並且必定要仔細閱讀解決辦法
json.dumps()和json.loads()是json格式處理函數(能夠這麼理解,json是字符串)
(1)json.dumps()函數是將一個Python數據類型列表進行json格式的編碼(能夠這麼理解,json.dumps()函數是將字典轉化爲字符串)
(2)json.loads()函數是將json格式數據轉換爲字典(能夠這麼理解,json.loads()函數是將字符串轉化爲字典)
subscriptable可下標訪問的
使用模板
參考連接:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014320129740415df73bf8f81e478982bf4d5c8aa3817a000
1)處理帶有參數的URL如:
@post('/api/comments/{id}/delete')#這個也挺好的-------------------------- def api_delete_comments(id, request):#參數爲id
2)變量替換的操做
3)關於{{}}的意思,html頁面中的這段是表明一個變量,是請求處理函數傳遞參數後進行替換用的
python 參數
參考連接:
比較詳細:https://www.cnblogs.com/bingabcd/p/6671368.html
菜鳥教程:http://www.runoob.com/python3/python3-function.html
命名關鍵字參數:https://www.cnblogs.com/Commence/p/5578215.html
1)*
後面的參數被視爲命名關鍵字參數。若是單獨出現星號 * 後的參數必須用關鍵字傳入。例:
>>> def f(a,b,*,c): ... return a+b+c ... >>> f(1,2,3) # 報錯 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: f() takes 2 positional arguments but 3 were given >>> f(1,2,c=3) # 正常#關鍵字參數是這樣傳入的 6 >>>
vue.js
參考連接:https://cn.vuejs.org/v2/guide/events.html
沒有postJSON,若是不是考慮到了是否有這個函數的問題,我真不知道這個問題會浪費我多少時間
有些網頁修改後不會生效,必須重啓服務器才行
假如這個錯誤真的解決了的話,回想起前幾天那樣去解決錯誤,那麼就應該認識到那樣去作是多麼愚蠢,而此次閱讀源代碼,或許是稍微明智的選擇
這個錯誤的緣由找到了,多虧我去handler裏面看了一眼,以前一直是在從終端裏的報錯信息裏尋找提示信息,
handler裏面的邏輯
@get('/document_delete') def document_delete(*,user): #name = request.args.get('username', '') #name=request.POST.get('username') #name=request.GET.get('username') print(user) return user
是由於裏面的html中的post發送的鍵名必須是user,而我換
//$.getJSON("/document_delete",{'a':'b'},function(){console.log('over');});#會報錯 $.getJSON("/document_delete",{'user':'123453'},function(){alert('script')});#不會
我說這麼會這麼蹊蹺,原來是這裏的緣由,是鍵名沒有指定的值(請求處理的裏面指定的user),這樣提及來那個錯誤
Traceback (most recent call last): File "C:\Users\Administrator.SC-201605202132\Envs\web_go\lib\site-packages\aiohttp\web_protocol.py", line 41 8, in start resp = await task File "C:\Users\Administrator.SC-201605202132\Envs\web_go\lib\site-packages\aiohttp\web_app.py", line 458, in _handle resp = await handler(request) File "C:\Users\Administrator.SC-201605202132\Envs\web_go\lib\site-packages\aiohttp\web_middlewares.py", line 119, in impl return await handler(request) File "app.py", line 67, in logger return (await handler(request)) File "app.py", line 85, in response r = await handler(request) File "C:\Users\Administrator.SC-201605202132\Envs\web_go\lib\site-packages\aiohttp\web_urldispatcher.py", li ne 157, in handler_wrapper result = await result File "C:\Users\Administrator.SC-201605202132\Envs\web_go\coroweb.py", line 141, in __call__ return web.HTTPBadRequest('Missing argument: %s' %name) #這裏的請求一個位置參數,可是傳遞了兩個就說的通了 TypeError: __init__() takes 1 positional argument but 2 were given
jquery賦值
$("#result_box").val(result) #不是 $("#result_box").val()=result; 對於jquery,要嘗試分清楚是括號外和括號裏調用方法
關於高階函數中的返回函數,可能因爲個人理解並不深入,我認爲他只是把判斷應該使用什麼函數的步驟給抽取出來,增長代碼的重用性,這樣有一些好處,能夠解決用ifelse語句判斷改使用什麼函數時帶來的要傳什麼參數的問題wrapper()
函數的參數定義是(*args, **kw)
,所以,wrapper()
函數能夠接受任意參數的調
這段代碼
async def create_pool(loop, **kw): logging.info('create database connection pool...') global __pool __pool = await aiomysql.create_pool(#這樣的變量,能包含不少東西 host=kw.get('host', 'localhost'),#這樣使用關鍵字 port=kw.get('port', 3306), user=kw['user'], password=kw['password'], db=kw['db'], charset=kw.get('charset', 'utf8'), autocommit=kw.get('autocommit', True), maxsize=kw.get('maxsize', 10), minsize=kw.get('minsize', 1), loop=loop )
取餘數
if delta < 604800: return u'%s天前' % (delta // 86400)
jinja2 Environment是一個類用於儲存配置,或者全局變量,或者用於從文件系統其餘位置加載模板
參考連接:http://docs.jinkan.org/docs/jinja2/api.html?highlight=environment
FileSystemLoader也是一個類,從文件系統加載模板。此加載程序能夠在文件系統上的文件夾中查找模板,而且是加載它們的首選方法。加載器將模板的路徑做爲字符串,或者若是須要多個位置,則列出它們,而後按給定順序查找:
loader = FileSystem Loader ([ '/ path / to / templates' ,'/ other / path' ]
*)google那個點擊框外的動畫
*)新問題:想根據model的值讓他選擇函數,可是我不想用if...else語句因此就開始尋找python的一些特性來解決這個問題,找到了修飾器、(不行)、偏函數(這個還有點用)。可是也不行。
#可使用相似今天看那個偏函數裏面對int2的傳入自定義的base來解決jieba()中的模式來選擇,應該也是能夠傳入字符串的 #使用偏函數來固定某些參數,這在這裏可能看不到這種偏函數帶來的好處,這是正常的,由於他本來就是用在須要屢次改動函數內的某些參數狀況 #而且,由於我是想讓model包含的值來替換jieba.cut裏面的「cut_all=True」,這大概是用偏函數解決不了,由於偏函數能夠固定某些參數的值, # 而並不能直接替換參數名和值的,因此若是隻用cut_all=True,或者False,那麼能夠直接使用 #jieba_cut(str,cut_all=model)來替換if...else,可是如今還有jieba.cut_for_search()連函數名就變了,因此用這個應該解決不了,我應該尋找能 #面對不一樣函數名來替換他們相同參數的一種python特性 #忽然想到,能不能讓自定義函數使用偏函數這種特性呢 def model_choose(str,model): #jieba_cut=functools.partial(jieba.cut,cut_all=True) global result if model==1:#標誌着是全模式 result.append('全模式') jieba.cut(str,cut_all=True) elif model==2:#標誌着精確模式 result.append('精確模式') return jieba.cut(str,cut_all=False) else:#搜索硬性模式 result.append('搜索引擎模式') return jieba.cut_for_search(str)
*)問題:pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on '127.0.0.1'")
類似問題:https://blog.csdn.net/su749520/article/details/78940096/
由於廖老師把連接配置寫在config_default.py裏了,而他的用戶名和個人密碼不同,修改後解決
*)使用pymonitor.py提示某些文件找不到
Traceback (most recent call last): File "pymonitor.py", line 68, in <module> start_watch(path, None) File "pymonitor.py", line 51, in start_watch start_process() File "pymonitor.py", line 40, in start_process process = subprocess.Popen(command, stdin=sys.stdin, stdout=sys.stdout, stderr=sys.stderr) File "c:\users\administrator.sc-201605202132\appdata\local\programs\python\python36\Lib\subprocess.py", line 729, in __init__ restore_signals, start_new_session) File "c:\users\administrator.sc-201605202132\appdata\local\programs\python\python36\Lib\subprocess.py", line 1017, in _execute_child startupinfo) FileNotFoundError: [WinError 2] 系統找不到指定的文件。
解決方案:https://www.liaoxuefeng.com/discuss/001409195742008d822b26cf3de46aea14f2b7378a1ba91000/001453355013335b14701d6d6494b6cb7d1268735e99cdd000
*)使用uikit框架問題
不知道什麼緣由必須將static下的uikit.min.css重命名爲其餘的名才能顯示效果