popup的簡單應用舉例 popup的簡單應用舉例(具體在增刪改查元件中用到)以及補充的知識點
阿新 • • 發佈:2018-12-20
popup的簡單應用舉例(具體在增刪改查元件中用到)以及補充的知識點
一、首先說一下自執行函式
1. 立即執行函式是什麼?也就是匿名函式
立即執行函式就是
- 宣告一個匿名函式
- 馬上呼叫這個匿名函式
2、popup的舉例
點選,彈出一個新的視窗。儲存完事,頁面不重新整理資料就返回了。(點選admin的+,彈出的框就是用popup來做的)
具體操作步驟:
1、urls.py
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^index/', views.index),
url(r'^pop/', views.pop),
]
2、views.py
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})
3、templaates
index.html
<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彈出一個
如果有兩個+最多彈出兩個框
</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>
執行結果截圖
3、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
4、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,
5、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}
6、反射舉例
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() 複製程式碼
6、知識點大致整理
- 單例模式
- 檔案匯入
- 類方法
- 反射
- 匯入一個模組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)
一、首先說一下自執行函式
1. 立即執行函式是什麼?也就是匿名函式
立即執行函式就是
- 宣告一個匿名函式
- 馬上呼叫這個匿名函式
2、popup的舉例
點選,彈出一個新的視窗。儲存完事,頁面不重新整理資料就返回了。(點選admin的+,彈出的框就是用popup來做的)
具體操作步驟:
1、urls.py
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^index/', views.index),
url(r'^pop/', views.pop),
]
2、views.py
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})
3、templaates
index.html
<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彈出一個
如果有兩個+最多彈出兩個框
</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>
執行結果截圖
3、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
4、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,
5、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}
6、反射舉例
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() 複製程式碼
6、知識點大致整理
- 單例模式
- 檔案匯入
- 類方法
- 反射
- 匯入一個模組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)