python 全棧 web框架 Django基本操作
阿新 • • 發佈:2017-06-23
一個 data pytho ket position mysql bootstrap 連接數據庫 減少
django 操作總結! django框架安裝: cmd安裝: pip3 install django pycharm安裝: 在python變量下 搜索 django 安裝
創建django項目: cmd下創建django項目: 創建django程序: django-admin startproject mysite 進入程序目錄: cd mysite
啟動socket服務端,等待用戶發送請求 IP 端口 python manage.py runserver 127.0.0.1:8080
pycharm下創建django項目: 直接新建一個django項目即可! 啟動程序:直接運行django,啟動之後會生成一個固定的IP和端口的url地址。 端口默認:8000;IP默認:127.0.0.1。瀏覽器直接訪問這個網址,有提示證明創建成功。
pycharm下django的操作:
一、配置文件: - 在項目下: - 創建靜態文件 static 用於存放 CSS,JS,圖片等文件 - 創建視圖函數文件 用於編寫視圖函數 - 創建sql數據庫連接文件 通過類創建連接數據庫的操作,減少代碼復用。 - settings中添加或是查看路徑是否正確: - 模版路徑:TEMPLATE_DIRS = (os.path.join(BASE_DIR,‘templates‘),) - 靜態文件路徑:STATICFILES_DIRS = (os.path.join(BASE_DIR,‘static‘),) - 隱藏MIDDLEWARE 路徑中 ‘django.middleware.csrf.CsrfViewMiddleware‘ 信息 二、路由系統: 路由關系: url ---> 函數 在urls.py 文件中導入視圖函數文件,寫上路由關系! 示例: from app01 import views url(r‘^login/‘, views.login), django中的路由系統和其他語言的框架有所不同,在django中每一個請求的url都要有一條路由映射,這樣才能將請求交給對一個的view中的函數去處理。 其他大部分的Web框架則是對一類的url請求做一條路由映射,從而是路由系統變得簡潔。 三、視圖函數: 確定好相對應的路由關系之後,就需要編寫路由函數。所有的信息都是從數據庫中獲取,此時就需要在函數中建立與數據庫的鏈接,獲取數據!pymysql操作,略過! 註意點: - 定義函數的時候,必須設置形參 request 接收瀏覽器的請求! - 判斷請求方式:request.method - 獲取不通方式提交的數據: (GET方式,POST方式) --->
GET方式提交的信息在請求頭url中,在頁面網址上就能看到!
POST方式提交的信息在請求體中。不能直接查看到!
request.GET.get() 獲取get方式提交的一個值 request.POST.get() 獲取post方式提交的一個值 request.POST.getlist() 獲取post方式提交的數組信息(多值)
- 返回信息:(三種方式) return HttpResponse(‘字符串‘) 直接返回字符串 return redirect(‘URL‘) 跳轉到某個url頁面下 return render(request,‘模板路徑(.html文件)‘) 跳轉到某個模版頁面 return render(request,‘模板路徑‘,{值}) 跳轉到某個模版頁面 同時給這個頁面返回值 render實質:1. 獲取模板+數據,後臺渲染;2. HttpReponse(...)把渲染之後的字符串信息返回給頁面
補充:模板渲染是在後臺執行,完畢之後再把字符串返回給模版,通過瀏覽器的渲染顯示! 值類型:傳值必須是字典形式!可以傳多個值!key為字符串,value可以為單值,列表,字典! { ‘k1‘: ‘v1‘, 單值類型 ‘k2‘: [1,2,32,34],列表類型 ‘k3‘: {‘x1‘:‘v2‘...}, 字典類型 } 四、模版: 模版渲染: 對於函數傳遞回來的值,模版都是通過值的key去獲取!!!這個一定要註意! 模版語言: (註意:對於列表或是字典,獲取其中的元素是用.的方式!!! 前端沒有索引這個概念 用於去取值,但前端支持點的方法去獲取。 例如一個字典 dic = {"k1":v1} ====> dic.k1獲取值 v1) 獲取單值:{{k1}} 獲取列表中的某個值:{{k2.索引值}} 獲取所有單值:循環方式: {% for item in k3 %} {{item.k1}} …… {% endfor %} 若是有條件判斷:{% if 條件 %} 語句 {% else %} 語句 {% endif %} 模版操作方式: 1、新url方式:點擊跳轉到另一個url頁面 - 註意:要跳轉到新urls路徑 必須以這種方式寫 -----> "/urls路徑/" 。否則後臺無法識別地址會報錯! 不管是form表單或是a標簽!註意跳轉或是提交信息的urls路徑的書寫方式! 2、模態框操作:點擊觸發事件,出現彈框! - 前端js的應用 註意點: http連接,建立在TCP連接之上! http 協議具有:無狀態,短連接的特性! 模版引擎的渲染,是在服務端進行的 wsgi 是一個協議,提供通信接口,實質就是socket 重定向 是瀏覽器完成的操作! 五、ajax html中,有點擊跳轉,頁面刷新功能的標簽是:a標簽,或是form表單!如果不想讓頁面自動刷新而是人為控制,此時就需要用到ajax. 阻止事件發生的操作: 1、標簽裏寫事件類型,函數前寫return,函數中也寫return false; - <a onclick=‘return func();‘></a> func(){ …… return false } 2、通過jQuery對象的方式,給標簽綁定某個事件,直接在事件觸發函數中寫return false - <a id="a"></a> $("#a).click(function(){ …… return false })
ajax是jQuery的一個方法,使用前需要先導入jQuery文件! 註意:頁面數據不管提交或是接收,都必須是字符串類型。 data傳值的類型:字符串,或是數組,沒有字典格式!若想傳遞先利用JSON轉換成字符串! 頁面的JSON語法: JSON.stringify(對象) ----> 字符串 JSON.parse("字符串") ----> 對象 ajax語法: $.ajax({ url: ‘要提交的地址‘, type: ‘POST‘, // GET或POST,提交方式 data: {‘k1‘: ‘v1‘,‘k2‘:‘v2‘}, // 提交的數據 dataType:"JSON", //設置接收的數據類型 traditional: true,// 如果提交的數據的值有列表,則需要添加此屬性 success:function(data){ // 成功之後,執行回調函數 location.href = "要跳轉的地址" location.reload() //頁面重新加載 // 當前服務端處理完畢後,自動執行的回調函數 // data返回的數據 } }) 為配合ajax的使用,視圖函數也做了一定的修改,有了一個存放狀態的字典,有了錯誤檢測!返回的結果也必須是字符串類型的信息! 視圖函數代碼舉例: def change_class(request): ret = {"status":True,"message":None} try: cid = request.POST.get("cid") cname = request.POST.get("cname") sql = "update class set cname = %s where cid = %s" sqlmodus.put(sql,[cname,cid,])
except Exception as e: ret["status"] = False ret["message"] = "處理異常" return HttpResponse(json.dumps((ret))) //利用JSON把對象轉成字符串返回模版
模態與新urls 應用場景分析:
模態對話框(Ajax)用於: - 少量輸入框 - 數據少 示例:登錄
新URL方式 - 操作多 - 對於大量的數據以及操作 具體怎麽應用還是需要視具體情況及要求操作!沒有絕對只說!
Http請求生命周期: 請求頭 -> 提取URL -> 路由關系匹配 -> 函數 (模板+數據渲染) -> 返回用戶(響應頭+響應體) 六:母板操作: Django母版: 母版: 存放所有頁面公用 子板: 繼承母版 - 自定義當前頁面私有的東西 按照正常操作生成一個母板頁面, 在head標簽中寫上兩個block塊作為標誌位,用於導入CSS和JS文件 在body標簽下寫一個block塊作為標誌位,用於導入不同的代碼 母版: <html> <head> {% block css %} {%endblock%} ... {% block js %} {%endblock%} </head> <body> {% block table %} {%endblock%} </body> </html> 子板: {% extends "layout.html "%} 引入母板 {% block css %} CSS文件路徑或是代碼 {%endblock%} {% block js %} JS文件路徑或是代碼 {%endblock%} {% block table %} 文本內容 {%endblock%} 七、響應式布局:(CSS布置)借用兩大框架:BootStrap和fontawesome 1. BootStrap響應式布局: @media() 2. 柵格 (把整個頁面分成12份,不同的類名,對應著不同的類型,具體看文檔) 3. 表格 4. 導航條 5. 路徑導航 6. fontawesome 圖標 7. 布局position:absolute 對頁面區域的劃分及占比 fixed 是針對窗口做的定位;absolute是絕對定位,relative 相對定位是給absolute定位做的標桿! 8. :hover方法,以前只知道一個用法:鼠標移動到某個標簽上時,執行的操作。 現再補充以下: 當鼠標移動到xx樣式的父標簽上時,其下子標簽.g應用以下屬性 .xx:hover .g{ CSS樣式 } 八、cookies a. 保存在瀏覽器端“鍵值對” b. 服務端可以向用戶瀏覽器端回寫cookie c. 客戶端每次發送請求時,會攜帶cookie去匹配 - 發送Http請求時,在 請求頭 中攜帶當前所有可訪問的cookie - 返回時,存在於 響應頭 - 可以設置cookies的超時時間(生命周期) 對象 obj的三種樣式: obj = HttpReponse(..) obj = render(...) obj = redirect(..) cookies的設置和獲取: - 明文格式: 設置cookies 明文格式! obj.set_cookie( key, //鍵 value=‘‘, //值 max_age=None, //超時時間 expires=None, //具體的超時日期 path=‘/‘, //為某個url設置cookies,僅在該路徑下生效 / 代指所有路徑 domain=None, // 域名 訪問某個域名網站,設置cookies (一級域名綁定其下域名也可以拿到,若是二級域名極其以下設置cookies,則其他的域名拿不到!) //安全相關! secure=False, // Https協議 httponly=False //只有通過http協議來回發送請求才用! 只能在Http請求中傳輸,js代碼無法獲取到 ) 讀取:request.COOKIES.get("鍵名") - 密文格式:設置加密的cookies cookie簽名: obj.set_signed_cookie(‘ticket‘,"123123",salt=‘加密字符串‘) 獲取簽名的cookies request.get_signed_cookie("key名",salt="加密方式") 註意:一般設置cookies,常用的參數有:key,value,max_age,path,salt(密文才有,其他都有!)
python 全棧 web框架 Django基本操作