1、首先說一下自執行函數html
1. 當即執行函數是什麼?也就是匿名函數
當即執行函數就是mysql
- 聲明一個匿名函數
- 立刻調用這個匿名函數
二、popup的舉例sql
點擊,彈出一個新的窗口。保存完事,頁面不刷新數據就返回了。(點擊admin的+,彈出的框就是用popup來作的)數據庫
具體操做步驟:django
一、urls.pyjson
urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^index/', views.index), url(r'^pop/', views.pop), ]
二、views.pyapp
def index(request): return render(request,"index.html") def pop(request): if request.method=="GET": return render(request,"pop.html") else: user = request.POST.get("user") print(user) return render(request,"pop_response.html",{"user":user})
三、templaates函數
index.htmlpost
<body>
<h1 id = "a">無所謂</h1>
<a href="#" onclick=popUp("http://www.baidu.com")>點我點我</a>
<script>
function xxxpopupCallback(text) { document.getElementById('a').innerHTML = text; //找到標籤吧值替換成用戶傳進來的值 } function popUp(url) { window.open( '/pop/', "n1","status=1, height:500, width:600, toolbar=0, resizeable=0"); {# window.open( url, "n1","status=1, height:500, width:600, toolbar=0, resizeable=0");#} }
分析:
index頁面的第一個參數就是url,寫什麼路徑就看到什麼頁面
n1:彈出窗口的名字,定死了就彈出一個
'/pop/','/pop/' 一個url彈出一個
若是有兩個+最多彈出兩個框fetch
</script> </body>
pop.html
<body>
<form action="" method="post"> {% csrf_token %} <input type="text" name="user"> <input type="submit" value="提交"> </form> </body>
pop_response.html
<h1>正在關閉</h1>
<script> (function () { // 能夠調用popup原頁面的一個函數, opener.xxxpopupCallback("{{ user }}"); xxxpopupCallback是自定義的函數 window.close(); //傳完數據以後自動關閉 })() </script>
運行結果截圖
三、Form時時更新的兩種方式
在ModelForm須要知道:
from app03 import models from django.forms import ModelForm class UserForm(ModelForm): class Meta: model = models.UserInfo fields = "__all__" 它的內部找到類以後,若是 類裏的字段是FK,就會自動生成ModelChoiceField 若是是M2M ,就會自動生成ModelMutilChoiceField
四、isintance和type
class Foo(object): pass class Bar(Foo): pass obj = Bar() # isinstance用於判斷,對象是不是指定類的實例 (錯誤的) # isinstance用於判斷,對象是不是指定類或其派生類的實例 # isinstance不精準 print(isinstance(obj,Foo),id(obj)) #True 35558624 print(isinstance(obj,Bar),id(obj)) #True 35558624 print(type(obj)==Foo) #False print(type(obj)==Bar) #True # 思考? # 對象,判斷是不是某個類型? # 若是沒有繼承關係用isinstance, # 若是有繼承關係能夠用type,
五、json的補充
import json v = {"name":"海燕","age":22} str_dic = json.dumps(v) print(json.dumps(v),type(str_dic)) #{"name": "\u6d77\u71d5", "age": 22}<class 'str'> print(json.dumps(v,ensure_ascii=False)) #{"name": "海燕", "age": 22}
六、反射舉例
from 反射.settings import DB_PATH def func(): # 導入文件 # 反射 # DB_PATH = "db.mysql.MySQLHelper" module_path,cls_name = DB_PATH.rsplit('.',maxsplit=1) # 以字符串的形式導入模塊 # from db import mysql import importlib module_obj = importlib.import_module(module_path) # 去模塊中導入類 cls = getattr(module_obj,cls_name) # 類實例化 obj = cls() obj.fetchone() if __name__ == '__main__': func() 複製代碼
六、知識點大體整理
- 單例模式 - 文件導入 - 類方法 - 反射 - 導入一個模塊importlib,利用反射找到類 - getattr - 面向對象 - 遇到封裝數據時、;字典 本身寫一個類,封裝對象來作 - 遇到循環數據時:字典,元組,列表,可迭代對象(__iter__) - 遇到後臺對數據加工在頁面中循環展現,能夠經過yield來作(邊循環邊生產)。也能夠先處理再循環 - request.GET - ?name=alex&age=18&age=19 #若是遇到這樣的。 - QueryDict類型 = {"name":["alex",],"age":[18,19]} - 要想被修改 .mutable = True params["hobby"] = "魯寧" QueryDict類型 = {"name":["alex",],"age":[18,19],hobby:["魯寧"],} params["hobby"] = ["魯寧"] #傳進去的是一個列表套列表 QueryDict類型 = {"name":["alex",],"age":[18,19],hobby:[["魯寧"]],} - params.setlist("hobby",["魯寧"]) #直接把自己的元素傳進去 QueryDict類型 = {"name":["alex",],"age":[18,19],hobby:["魯寧"],} - 類 - 組件 - StarkSite,單利模式,用於保存Model類和處理這個類增刪改查的配置類的對象 - StarkConfig:處理增刪改查的基類 - ChangeList:將列表頁面的功能封裝到此類中 - FilterRow:建立的可迭代對象(__iter__),一個對象保存了組合搜索中的一行數據 - FilterOption:封裝組合搜索的配置項(數據庫字段,是否多選,是否choice,條件) - 使用 - class UserInfo(models.MOdel):.... 在stark.py class UserMOdelForm(MOdelForm): class Meta: model = UserInfo fields = "__all__" class UserinfoConfig(v1.StarkConfig) list_display ..... model_form_class = UserMOdelForm v1.site.register(UserInfo,UserinfoConfig)