1. 程式人生 > >popup的簡單應用舉例 popup的簡單應用舉例(具體在增刪改查元件中用到)以及補充的知識點

popup的簡單應用舉例 popup的簡單應用舉例(具體在增刪改查元件中用到)以及補充的知識點

popup的簡單應用舉例(具體在增刪改查元件中用到)以及補充的知識點

一、首先說一下自執行函式

1. 立即執行函式是什麼?也就是匿名函式

立即執行函式就是

  1. 宣告一個匿名函式
  2. 馬上呼叫這個匿名函式

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. 立即執行函式是什麼?也就是匿名函式

立即執行函式就是

  1. 宣告一個匿名函式
  2. 馬上呼叫這個匿名函式

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) 
複製程式碼