web前端【第十五篇】popup簡單使用(彈出頁面)
阿新 • • 發佈:2018-02-20
model 循環 sci return submit mutable 數據 src close
一、首先說一下自執行函數
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)
web前端【第十五篇】popup簡單使用(彈出頁面)