1. 程式人生 > >python 全棧 web框架 Django基本操作

python 全棧 web框架 Django基本操作

一個 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基本操作