最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Django中數(shù)據(jù)在前后端傳遞的方式之表單、JSON與ajax

 更新時間:2022年10月26日 10:53:08   作者:天行健·  
Django從后臺往前臺傳遞數(shù)據(jù)時有多種方法可以實現(xiàn),下面這篇文章主要給大家介紹了關于Django中數(shù)據(jù)在前后端傳遞的方式之表單、JSON與ajax的相關資料,需要的朋友可以參考下

前言

最近用Django寫項目的時候用到了數(shù)據(jù)的傳遞,一竅不通,查了點資料。記錄一下。水平不高,瓜不保熟。

 從兩方面來說:從后端傳遞給前端頁面、以及從前端頁面的輸入數(shù)據(jù)傳給后端

先說簡單的:

1、從后端到頁面、也就是view文件到傳遞給HTML展示出來

以Django框架為例,views里有個函數(shù)叫test_view 他作為后端函數(shù)向瀏覽器發(fā)送 test_view.html展示給用戶。

# /views
def test_view(request):
    python_data = "python里的數(shù)據(jù)"
    return render(request, "test_view.html", {"html_data_name":python_data})

render的第三個參數(shù)就是傳進去的數(shù)據(jù)

那么,怎么獲取呢。html 文件里:雙大括號擴住數(shù)據(jù)名

<!--/test_view.html -->
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
	<p>數(shù)據(jù)讀?。簕{html_data_name}}</p>
</body>
</html>

2、從頁面到后端、也就是HTML文件到views文件

通過表單傳給后端:在HTML里建一個表單,這是一種HTML內置的獲取、提交數(shù)據(jù)的方法。 表單里action=""意為把數(shù)據(jù)傳給自己頁面的url

<!--/test_view.html -->
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
	<form  method="post" action="">
        {% csrf_token %}
        <input type="text" name="html_data_to_views_name" value="Mickey">
        <input type="submit" value="Submit">
    </form> 
</body>
</html>

獲取方法:request.POST.get('變量名')

# /views
def test_view(request):
    if request.method == 'POST':
        data_from_html = request.POST.get('html_data_to_views_name')
        HttpResponse(f'views得到表單數(shù)據(jù){data_from_html}')
    python_data = "python里的數(shù)據(jù)"
    return render(request, "test_view.html", {"html_data_name":python_data})

以上代碼的修改在于增加了個判斷。判斷request.method 是否為POST。當表單提交的時候就會重新調用了一次test_view,并且request里包含著表單的內容,方法為post。

這就會進入判斷,通過request.POST.getrequest里的數(shù)據(jù)取出。

以上這兩種有很大缺陷,每次傳遞都是一次刷新,不適用于大量數(shù)據(jù)。比如網頁需要根據(jù)數(shù)據(jù)實時更新畫面之類的。那就不大行了

復雜一點的 Ajax 與 JSON

可以簡單理解為:

  • Ajax 是一個不用刷新就能傳輸數(shù)據(jù)的玩意兒,而且這個玩意不是單方向的,它既能頁面?zhèn)鹘o后端,也能后端傳給頁面。而且你運行一次他就給你傳一次。
  • JSON 是一種數(shù)據(jù)格式,在python里一個字典的變量,你把它傳到HTML的JavaScript里它還像字典一樣使用。其實就是方便傳輸。

JSON

在Django中,使用JSON由后端傳輸數(shù)據(jù)給前端,有兩種方式,一種是使用Python的JSON包,一種是使用Django的JsonResponse

# views.py 發(fā)送
 def test_view(request):
     data={
         'html_data_name': 'python_data',
     }
    # return HttpResponse(json.dumps(data)) # 會被識別為text/html應該是:
    return HttpResponse(json.dumps(data), content_type='application/json')
    # 或return JsonResponse(data)
<!--/test_view.html 讀取-->
<script>
var jsondata  = JSON.parse(data);//原生
</script>

同樣的也能從HTML發(fā)送給后端,只是需要放到表單里提交:

<!--/test_view.html -->
 
<!--假設你有一個JSON數(shù)據(jù)要先把他轉為字符串 -->
<script>
JSONdata={'key':'value'}
json_str_data = JSON.stringify(JSONdata).toString();
function get_json_str(){
    var inp_id =document.getElementById("str_json_data");
    inp_id.value = json_str_data
}
</script>
 
<!--將字符串放到一個隱藏的表單input里,提交后就傳走了 -->
<form method="post" action="">
    {% csrf_token %}
    <input type="text" id="str_json_data" style="display:none" name="str_json_data">
    <button type="submmit" onclik="get_json_str()">提交</button>
</form>
 
# views.py 讀取
    # /views
    def test_view(request):
        if request.method == 'POST':
            json_data = json.loads(request.body) //json讀取方式
            return HttpResponse("get!")
        return render(request, "test_view.html", {})
 

這里涉及到倆概念:

「解析」:將JSON格式的字符串轉化成JSON對象(JS對象值)的過程。也稱為「反序列化」。

「序列化」:就是說把原來是對象的類型轉換成字符串類型(或者更確切的說是JSON字符串類型的)。

解析:將字符串變成了Obj帶有的屬性就是字符串里顯示的??梢杂命c號取出。

var data = '{"name":"chunlynn" ,"age": 27, "sex": "man" ,"qq":"277539687"}'; 
 
var jsondata = $.parseJSON(data);//jQuery
var jsondata  = JSON.parse(data);//原生

序列化

var jsonstrdata = JSON.stringify(data).toString();

ajax

ajax的使用方式:

我當時沒看懂,所以在這解釋一下里面的語句都是干嘛的:

<!DOCTYPE html>
<html>
<head>
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>
<script>
$(document).ready(function(){
  $("button").click(function(){
    $.ajax({
    data:{"data_send":"你想發(fā)給url的數(shù)據(jù)"} //教程里沒給url發(fā)數(shù)據(jù)
    url:"訪問這個url后,對應views發(fā)過來的數(shù)據(jù)就是下面的data_get",
    success:function(data_get){
      $("#div1").html(data_get); //用得到的數(shù)據(jù)替換掉id="div1"的div里的那句話
    }});
  });
});
</script>
</head>
<body>
 
<div id="div1"><h2>在ajax訪問成功后將這里的數(shù)據(jù)變成ajax得到的數(shù)據(jù)</h2></div>
<button>使用ajax</button>
 
</body>
</html>

整體流程就是:點擊按鈕->觸發(fā)了對應函數(shù)->ajax啟動:此時ajax將data里的數(shù)據(jù)傳給了url(教程里沒傳,但可以傳)并訪問、觸發(fā)了url對應views里的視圖(后端)、并且后端返回了數(shù)據(jù)被ajax放到了success:function()的參數(shù)里、運行了這個函數(shù)-> html內容被改變。

ajax的主要字段:

  • data: 傳給后端的數(shù)據(jù)
  • url: 傳給哪個后端處理函數(shù)
  • success:得到數(shù)據(jù)后要這些數(shù)據(jù)干啥

Ajax+json:

<!DOCTYPE html>
<html>
<head>
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>
<script type="text/javascript">  
$(document).ready(function(){
  $("button").click(function(){
    var token_csrf = "{{ csrf_token }}";  //因為django的form表單中都包含csrf_token,因此在用ajax傳表單數(shù)據(jù)時也要帶上
    var JSON_data = { "js_data": 555 };  
    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        headers: { "X-CSRFToken": token_csrf },
        url: "/testview",
        dataType: "json",
        data: JSON.stringify(JSON_data), //傳進views里的數(shù)據(jù)
        success: function (data) { //data為地址傳過來的數(shù)據(jù)
            //在此對data進行操作
            }
        };
    });
  });
});
 
</script>
</head>
<body>
 
<div id="div1"><h2>使用 jQuery AJAX 修改文本內容</h2></div>
<button>獲取其他內容</button>
 
</body>
</html>
 

后端:

def post(self, request):
    data = json.loads(request.body)
 
    get_data = data["js_data"]
 
    data={
        'send_data':'send_data',
    }
    return HttpResponse(json.dumps(data),content_type="application/json")
    # 或者直接使用JsonResponse函數(shù)
    # return JsonResponse(data)

總結

到此這篇關于Django中數(shù)據(jù)在前后端傳遞的方式之表單、JSON與ajax的文章就介紹到這了,更多相關Django數(shù)據(jù)在前后端傳遞方式內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • python使用openpyxl操作excel的方法步驟

    python使用openpyxl操作excel的方法步驟

    這篇文章主要介紹了python使用openpyxl操作excel的方法步驟,詳細的介紹了openpyxl的常用屬性以及操作excel的方法,感興趣的可以了解一下
    2020-05-05
  • 回調函數(shù)的意義以及python實現(xiàn)實例

    回調函數(shù)的意義以及python實現(xiàn)實例

    本篇文章主要介紹了回調函數(shù)的意義以及python實現(xiàn)實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Python tornado上傳文件的功能

    Python tornado上傳文件的功能

    這篇文章主要介紹了Python tornado上傳文件的功能,代碼分為普通上傳和ajax上傳,通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • pytorch 權重weight 與 梯度grad 可視化操作

    pytorch 權重weight 與 梯度grad 可視化操作

    這篇文章主要介紹了pytorch 權重weight 與 梯度grad 可視化操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • 如何利用pycharm進行代碼更新比較

    如何利用pycharm進行代碼更新比較

    這篇文章主要介紹了如何利用pycharm進行代碼更新比較,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • python實現(xiàn)pptx批量向PPT中插入圖片

    python實現(xiàn)pptx批量向PPT中插入圖片

    大家好,本篇文章主要講的是python實現(xiàn)pptx批量向PPT中插入圖片,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-02-02
  • 使用Pytorch實現(xiàn)two-head(多輸出)模型的操作

    使用Pytorch實現(xiàn)two-head(多輸出)模型的操作

    這篇文章主要介紹了使用Pytorch實現(xiàn)two-head(多輸出)模型的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • Python中給字典排序的四種方法

    Python中給字典排序的四種方法

    我們經常在計算機等級考試中遇到詞頻排序的問題,我們一般先通過生成字典的方法,統(tǒng)計詞的頻次,然后給字典排序,那么如何快速地給字典按照鍵值進行排序呢,本文主要介紹了Python中給字典排序的四種方法,感興趣的可以了解一下
    2023-08-08
  • Python 代碼實現(xiàn)列表的最小公倍數(shù)

    Python 代碼實現(xiàn)列表的最小公倍數(shù)

    這篇文章主要介紹了Python 代碼實現(xiàn)列表的最小公倍數(shù),代碼實現(xiàn)了計算列表中元素的最小公倍數(shù)的功能,包括公式介紹,需要的朋友可以參考一下
    2021-11-11
  • pycharm2020.1.2永久破解激活教程,實測有效

    pycharm2020.1.2永久破解激活教程,實測有效

    很多使用pycharm2020.1.2版本的朋友,不知道如何激活破解,這篇文章主要介紹了pycharm2020.1.2永久破解激活教程,經小編實測有效,需要的朋友可以參考下
    2020-10-10

最新評論

冕宁县| 扶风县| 中卫市| 亳州市| 桃园县| 民权县| 河津市| 马山县| 隆德县| 静安区| 通化市| 汕尾市| 镇沅| 临湘市| 湟源县| 凤城市| 泰州市| 沈阳市| 普陀区| 永和县| 稷山县| 黑水县| 应城市| 北流市| 安徽省| 外汇| 西城区| 介休市| 辉南县| 墨脱县| 浮梁县| 岐山县| 铅山县| 沧州市| 新乡县| 无为县| 新津县| 昌乐县| 红河县| 辽宁省| 云和县|