1. 程式人生 > >web前端【第十五篇】popup簡單使用(彈出頁面)

web前端【第十五篇】popup簡單使用(彈出頁面)

model 循環 sci return submit mutable 數據 src close

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

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)
                

web前端【第十五篇】popup簡單使用(彈出頁面)