這篇文章主要講解了“Django怎么實(shí)現(xiàn)列表頁(yè)商品數(shù)據(jù)返回功能”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“Django怎么實(shí)現(xiàn)列表頁(yè)商品數(shù)據(jù)返回功能”吧!
成都創(chuàng)新互聯(lián)公司2013年至今,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站制作、成都做網(wǎng)站網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元忠縣做網(wǎng)站,已為上家服務(wù),為忠縣各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18982081108采用的是cbv方式,cbv就是在url中一個(gè)路徑對(duì)應(yīng)一個(gè)類
rom django.views.generic import View from goods.models import Goods class GoodsListView(View): """ 通過(guò)django的view實(shí)現(xiàn)商品列表頁(yè) :param request: :return: """ def get(self,request): #重寫(xiě)View中的get方法 goods_list = Goods.objects.all()[:10] #返回前所有商品的前10條數(shù)據(jù) json_list = [] for goods in goods_list: json_item = {} json_item["name"] = goods.name json_item["market_price"] = goods.market_price json_item["sold_num"] = goods.sold_num json_list.append(json_item) from django.http import HttpResponse import json content = json.dumps(json_list) #將JSON格式轉(zhuǎn)成python字符串 return HttpResponse(content,"application/json")
在urls.py文件中配置函數(shù)對(duì)應(yīng)的路由
from goods.views_base import GoodsListView urlpatterns = [ """ #商品列表的路由 url(r'^goods/$',GoodsListView.as_view(),name="goods_list") """ ]
接下來(lái)我們就可以通過(guò)url看到返回的數(shù)據(jù)信息了
補(bǔ)充知識(shí):django通過(guò)ajax請(qǐng)求接口返回多條數(shù)據(jù),并動(dòng)態(tài)生成表格,請(qǐng)求表單后將表格數(shù)據(jù)并入庫(kù)
一、最近在做接口相關(guān)的開(kāi)發(fā),需求是這樣的,通過(guò)一個(gè)接口所需要傳遞的參數(shù),調(diào)用接口后,處理接口響應(yīng)的參數(shù),返回多條數(shù)據(jù),并動(dòng)態(tài)生成表格,請(qǐng)求表單后將表格的數(shù)據(jù)入庫(kù),下面是我改過(guò)的代碼,跟實(shí)際代碼有些出入,但都是差不多的,只是命名相關(guān)的改了一下,第三方接口的代碼下面不會(huì)公布出來(lái),請(qǐng)見(jiàn)諒!
二、其中界面很簡(jiǎn)單,就一個(gè)文本輸入框,輸入關(guān)鍵字,一個(gè)查詢按鈕,點(diǎn)擊的時(shí)候觸發(fā)js事件,并通過(guò)ajax請(qǐng)求,還有一個(gè)暫時(shí)沒(méi)有數(shù)據(jù)的表格,查詢后動(dòng)態(tài)生成的數(shù)據(jù),操作只有一個(gè)移除功能,可以移除這條表格的數(shù)據(jù),保存后入庫(kù),這里只貼主要代碼,這里主要通過(guò)關(guān)鍵字來(lái)查找某個(gè)組group的用戶信息,具體操作需根據(jù)實(shí)際業(yè)務(wù)情況:
(1)、html頁(yè)面代碼如下:
<form method="post" action="{% url 'user:user_info_add' %}"> {% csrf_token %} <div> <input id="key_words" name="key_words" type="text"> <a οnclick="query({{ user_id }})">查詢</a> </div> <table> <thead> <tr> <th>姓名</th> <th>身份證號(hào)</th> <th>手機(jī)號(hào)</th> <th>操作</th> </tr> </thead> <tbody id="user_info"> </tbody> </table> <button type="submit">保存</button>
(2)、js事件代碼如下:
<script type="text/javascript"> function query(user_id){ var key_words= $('#key_words').val() $.ajax({ type: "post", url: "{% url 'user:user_query_info' %}", dataType: "json", data: JSON.stringify({user_id: user_id, key_words: key_words}), success: function (data) { for (var i = 0; i < data.length; i++) { $('#user_info').append("<tr id='row"+i+"'><input type='hidden' name='row"+ i +"' value='"+i+"'><td>"+ data[i]['name'] + "</td><input type='hidden' name='name"+ i +"' value='"+data[i]['name']+"'><td>"+ data[i]['id_no'] + "</td><input type='hidden' name='id_no"+ i +"' value='"+data[i]['id_no']+"'><td>" + data[i]['mobile_no']+"</td><input type='hidden' name='mobile_no"+ i +"' value='"+data[i]['mobile_no']+"'><td><a οnclick='remove("+i+")'>移除</a></td></tr>") } } }); } function remove(i) { $('#row'+i).remove() } </script>
(3)、其中點(diǎn)擊查詢來(lái)請(qǐng)求接口,這里django底下的url為user:user_query_info,其中view底下便是查詢所需數(shù)據(jù),并調(diào)用接口UserInfoSearch,這個(gè)封裝的接口便不提供了,就是封裝參數(shù)請(qǐng)求過(guò)去而已,返回響應(yīng)的數(shù)據(jù)動(dòng)態(tài)生成表格,主要代碼如下:
from django.views.decorators.csrf import csrf_exempt from django.http import JsonResponse from json import loads from user.models.user_model import User from interface.models import UserInfoSearch class QueryUserInfo(View): """ 查詢用戶信息 """ def post(self, request): # 獲取ajax請(qǐng)求過(guò)來(lái)的data數(shù)據(jù) for key in request.POST: keydict = eval(key) user_id = int(keydict["user_id"]) user_name = str(keydict["user_name"]) # 獲取用戶相關(guān)的數(shù)據(jù)庫(kù)數(shù)據(jù),供接口使用 user_object = User.objects.get(id=user_id) group_id = user_object.group_id query_id = user_object.query_id # 請(qǐng)求搜索用戶信息接口 user_info_data = loads(UserInfoSearch.get( self, request, query_id, group_id, user_name).content) user_info_data = loads(user_info_data) # 返回成功進(jìn)行操作,取出相關(guān)數(shù)據(jù),并封裝進(jìn)user_info_list這個(gè)列表當(dāng)中,返回一個(gè)JsonResponse對(duì)象,通過(guò)返回的數(shù)據(jù)動(dòng)態(tài)生成表格 if user_info_data['code'] == 0: print(user_info_data) user_data = user_info_data['data'] user_info_list = [] for user in user_data: user_list = user['userList'] for list in user_list: user_dict = {} user_dict['name'] = list['name'] for info_list in list['infoList']: user_dict['id_no'] = info_list['id_no'] user_dict['mobile_no'] = info_list['mobile_no'] user_info_list.append(user_dict) print(user_info_list) else: user_info_list = [] return JsonResponse(user_info_list, safe=False) @csrf_exempt def dispatch(self, *args, **kwargs): return super(QueryUserInfo, self).dispatch(*args, **kwargs)
接口返回成功時(shí),響應(yīng)的數(shù)據(jù)格式如下:
{ "code": 0, "message": "成功", "data": [ { "keywords": "軟件工程", "groupId": "10", "userList": [ { "name": '林小熊', "infoList": [ { "id_no": '4413199509237848', "mobile_no": '18565726783' } ] } { "name": '林大熊', "infoList": [ { "id_no": '4413199509837848', "mobile_no": '18565726788' } ] } ] } ] }
(4)、請(qǐng)求接口成功后,如果有響應(yīng)數(shù)據(jù)的話,就會(huì)動(dòng)態(tài)生成表格,在上面的js底下有封裝了幾個(gè)input表單隱藏域,用來(lái)保存數(shù)據(jù)使用,主要的思路是把表格底下的每一條數(shù)據(jù)的不同列都通過(guò)索引來(lái)區(qū)分標(biāo)記,比如第一行的就分別為row0,name0,id_no0,mobile_no0,以此類推,主要js的代碼如下:
for (var i = 0; i < data.length; i++) { $('#user_info').append("<tr id='row"+i+"'><input type='hidden' name='row"+ i +"' value='"+i+"'><td>"+ data[i]['name'] + "</td><input type='hidden' name='name"+ i +"' value='"+data[i]['name']+"'><td>"+ data[i]['id_no'] + "</td><input type='hidden' name='id_no"+ i +"' value='"+data[i]['id_no']+"'><td>" + data[i]['mobile_no']+"</td><input type='hidden' name='mobile_no"+ i +"' value='"+data[i]['mobile_no']+"'><td><a οnclick='remove("+i+")'>移除</a></td></tr>") }
點(diǎn)擊保存之后,要將返回多條數(shù)據(jù)入庫(kù),而關(guān)鍵字是一樣的,關(guān)鍵字一樣,但是返回?cái)?shù)據(jù)多天,這里就要篩選處理數(shù)據(jù),主要代碼如下,那些model還有引包的這里就不附上了,這里主要是記錄如何得到所要保存的數(shù)據(jù),篩選過(guò)濾數(shù)據(jù):
class UserInfoAddView(View): def post(self, request, user_id): """ 添加用戶信息 :param request: :param user_id: 用戶表id :return: """ key_words = request.POST.get('key_words') common_user_data = {'key_words': key_words} user_info_list = [] # 獲取所有表單數(shù)據(jù),但只篩選動(dòng)態(tài)表格底下的表單隱藏域名稱包含row的,然后通過(guò)這個(gè)鍵找到其值,然后通過(guò)其值找到動(dòng)態(tài)表格的各個(gè)數(shù)據(jù),封裝為字典,并追加到列表底下 for key, val in request.POST.items(): user_dict = {} if 'row' in key: name = request.POST.get('name' + val) id_no = request.POST.get('id_no' + val) mobile_no = request.POST.get('mobile_no' + val) user_dict['name'] = name user_dict['id_no'] = id_no user_dict['mobile_no'] = mobile_no # 這里過(guò)濾掉循環(huán)所產(chǎn)生空的字典,有數(shù)據(jù)才追加列表 if user_dict: user_info_list.append(user_dict) # 循環(huán)列表底下的字典數(shù)據(jù),并合并公共的數(shù)據(jù)字典,最后入庫(kù) for user in user_info_list: user_data = dict(common_user_data, **user) UserInfo.objects.create(**user_data) return render(request, '/user/user_info_success.html')
感謝各位的閱讀,以上就是“Django怎么實(shí)現(xiàn)列表頁(yè)商品數(shù)據(jù)返回功能”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)Django怎么實(shí)現(xiàn)列表頁(yè)商品數(shù)據(jù)返回功能這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
網(wǎng)站題目:Django怎么實(shí)現(xiàn)列表頁(yè)商品數(shù)據(jù)返回功能-創(chuàng)新互聯(lián)
當(dāng)前URL:http://muchs.cn/article46/cdeeeg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)、靜態(tài)網(wǎng)站、服務(wù)器托管、網(wǎng)站導(dǎo)航、關(guān)鍵詞優(yōu)化、建站公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容