国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁 > news >正文

教育機(jī)構(gòu)電商網(wǎng)站建設(shè)加盟福州seo招聘

教育機(jī)構(gòu)電商網(wǎng)站建設(shè)加盟,福州seo招聘,wordpress5.0編輯器是英文,網(wǎng)站主編 做啥文章目錄 一、choices參數(shù)choices參數(shù)的用法choices 參數(shù)用法總結(jié) 二、MVC與MTV模式1.MVC2.MTV 三、多對(duì)多的三種創(chuàng)建方式1.全自動(dòng)創(chuàng)建2.純手動(dòng)創(chuàng)建半自動(dòng)創(chuàng)建 四、Django與Ajax1.什么是Ajax常見的場(chǎng)景Ajax案例 一、choices參數(shù) 在沒有用到choices參數(shù)之前,我們?cè)贒…

文章目錄

  • 一、choices參數(shù)
      • choices參數(shù)的用法
      • choices 參數(shù)用法總結(jié)
  • 二、MVC與MTV模式
      • 1.MVC
      • 2.MTV
  • 三、多對(duì)多的三種創(chuàng)建方式
      • 1.全自動(dòng)創(chuàng)建
      • 2.純手動(dòng)創(chuàng)建
      • 半自動(dòng)創(chuàng)建
  • 四、Django與Ajax
      • 1.什么是Ajax
      • 常見的場(chǎng)景
      • Ajax案例

一、choices參數(shù)

在沒有用到choices參數(shù)之前,我們?cè)贒jango ORM創(chuàng)建表類中的字段是不是下面這樣的

# 舉例這是一張用戶基本信息表
class UserInfo(models.Model):username = CharField(max_length=32)age = IntegerField() # 整型字段不要傳max_length參數(shù)哦----特別注意gender = CharField(max_length=2)# 用戶性別

通過上面的userinfo表,我們是否可以想一下,在用戶性別字段中,人類的性別好像只有兩種表示方式,男/女,那這樣,我們?nèi)绻?00萬條用戶信息,而這100萬條用戶的性別分別有50萬男性和50萬女性。

這個(gè)時(shí)候,就造成了問題,既然我們這個(gè)字段的描述信息,只需要兩種描述就能完成這個(gè)用戶字段在性別的描述,我們?yōu)槭裁床幌胍环N方便簡(jiǎn)潔的形式去描述每一個(gè)用戶的性別呢?

這時(shí)候就可以用到choices參數(shù)

我們依然使用數(shù)字來記錄gender這個(gè)用戶性別字段的描述,大家學(xué)過數(shù)據(jù)庫就知道,能用整型存儲(chǔ)的信息,為什么要用字符型呢?很明顯,是因?yàn)檎捅茸址驼嫉目臻g小。注意:并不是所有的這種僅僅用幾個(gè)描述就能完成隊(duì)大量數(shù)據(jù)的描述,都去用數(shù)字的,此處只是用gender字段為例!!

choices參數(shù)的概念:它是一種以列表 / 元組的型式,里面嵌套著少數(shù)幾個(gè)小元組的方式,表示一種對(duì)應(yīng)關(guān)系

choices參數(shù)的用法

針對(duì)上述的用戶信息表我們做以下修改:將用戶性別用整型去記錄

# 創(chuàng)建userinfo表
class UserInfo(models.Model):username = models.CharField(max_length=32)age = models.IntegerField()# 在此處我們用到choices參數(shù)# 先定義一個(gè)chocies參數(shù)的對(duì)應(yīng)關(guān)系/其是就相當(dāng)于是代表數(shù)字的說明與介紹choices_gender = ((1, '男'),(2, '女'),)# 以上定義的choices列表就是下面gender字段的choices參數(shù)對(duì)應(yīng)的一個(gè)對(duì)應(yīng)關(guān)系,此處choices這個(gè)列表,也可以寫成元組的形式,根據(jù)個(gè)人愛好# 在我們將性別字設(shè)置成IntegerField類對(duì)象的時(shí)候,將它的choices參數(shù)設(shè)置為我們上面定義的choices列表gender = models.IntegerField(max_length=2,choices = choices_gender)

提問:如果我們向這個(gè)表中的gender字段存的值不在我們定義的choices列表中會(huì)怎么樣呢?

# 向表中插入幾條數(shù)據(jù)
models.UserInfo.objects.create(username='jack',age=18,gender=1)
models.UserInfo.objects.create(username='jerry',age=18,gender=2)
models.UserInfo.objects.create(username='tank',age=18,gender=3)

在這里插入圖片描述
總結(jié):如果存的數(shù)字是choices列表中的數(shù)字可以存進(jìn)userinfo表,存的數(shù)字不在choices列表中對(duì)應(yīng)關(guān)系中,也可以存

# 現(xiàn)在我們來查一下這張表中用戶對(duì)應(yīng)的gender字段的值。
user_obj_list = models.UserInfo.objects.all()for user_obj in user_obj_list:print(f'{user_obj.username}---{user_obj.age}---{user_obj.get_gender_display}')

在這里插入圖片描述

choices 參數(shù)用法總結(jié)

  1. 在定義choices這個(gè)對(duì)應(yīng)關(guān)系的時(shí)候,可以用列表套元組,可以用字典套元組,隨意,看自己心情
  2. 自定義的這個(gè)對(duì)應(yīng)關(guān)系的變量名(choices可以換別的)看你心情
  3. 在往表中存數(shù)據(jù)時(shí),不管是不是對(duì)應(yīng)關(guān)系中的內(nèi)容,都可以往表中存
  4. 在查詢使用choces參數(shù)的這個(gè)字段時(shí),想要查詢這個(gè)字段的值必須用get_字段名_display()才能獲取到正確的對(duì)應(yīng)內(nèi)容
  5. 固定句式 數(shù)據(jù)對(duì)象.get_字段名_display() 當(dāng)沒有對(duì)應(yīng)關(guān)系的時(shí)候 該句式獲取到的還是數(shù)字

二、MVC與MTV模式

1.MVC

Web服務(wù)器開發(fā)領(lǐng)域里著名的MVC模式,所謂MVC就是把Web應(yīng)用分為模型(M),控制器?和視圖(V)三層,他們之間以一種插件式的、松耦合的方式連接在一起,模型負(fù)責(zé)業(yè)務(wù)對(duì)象與數(shù)據(jù)庫的映射(ORM),視圖負(fù)責(zé)與用戶的交互(頁面),控制器接受用戶的輸入調(diào)用模型和視圖完成用戶的請(qǐng)求,其示意圖如下所示:
在這里插入圖片描述

2.MTV

Django的MTV模式本質(zhì)上和MVC是一樣的,也是為了各組件間保持松耦合關(guān)系,只是定義上有些許不同,Django的MTV分別是值:
● M 代表模型(Model): 負(fù)責(zé)業(yè)務(wù)對(duì)象和數(shù)據(jù)庫的關(guān)系映射(ORM)。
● T 代表模板 (Template):負(fù)責(zé)如何把頁面展示給用戶(html)。
● V 代表視圖(View): 負(fù)責(zé)業(yè)務(wù)邏輯,并在適當(dāng)時(shí)候調(diào)用Model和Template。

除了以上三層之外,還需要一個(gè)URL分發(fā)器,它的作用是將一個(gè)個(gè)URL的頁面請(qǐng)求分發(fā)給不同的View處理,View再調(diào)用相應(yīng)的Model和Template,MTV的響應(yīng)模式如下所示:
在這里插入圖片描述
一般是用戶通過瀏覽器向我們的服務(wù)器發(fā)起一個(gè)請(qǐng)求(request),這個(gè)請(qǐng)求回去訪問視圖函數(shù),(如果不涉及到數(shù)據(jù)調(diào)用,那么這個(gè)時(shí)候視圖函數(shù)返回一個(gè)模板也就是一個(gè)網(wǎng)頁給用戶),視圖函數(shù)調(diào)用模型,模型去數(shù)據(jù)庫查找數(shù)據(jù),然后逐級(jí)返回,視圖函數(shù)把返回的數(shù)據(jù)填充到模板中空格中,最后返回網(wǎng)頁給用戶。

三、多對(duì)多的三種創(chuàng)建方式

注意:多對(duì)多關(guān)系這種虛擬外鍵才有add、set、clear、remove,一對(duì)一和一對(duì)多的表是無法使用的

1.全自動(dòng)創(chuàng)建

class Book(models.Model):title = models.CharField(max_length=32)authors=models.ManyToManyField(to='Author')
class Author(models.Model):name = models.CharField(max_length=32)

優(yōu)勢(shì):自動(dòng)創(chuàng)建第三張表,并且提供了add、remove、set、clear四種操作

劣勢(shì):第三張表無法創(chuàng)建更多的字段,擴(kuò)展性較差。如果我們有一些業(yè)務(wù)邏輯就是在關(guān)系表上,我們就無法通過第三張表完成了。

2.純手動(dòng)創(chuàng)建

class Book(models.Model):title = models.CharField(max_length=32)
class Author(models.Model):name = models.CharField(max_length=32)
class Book2Author(models.Model):book=models.ForeignKey(to='Book')author= models.ForeigKey(to='Author')others=models.CharField(max_length=32)join_time = models.DataField(auto_now_add=True)

優(yōu)勢(shì):第三張表完全由自己創(chuàng)建,擴(kuò)展性強(qiáng)

劣勢(shì):編寫繁瑣,并不支持add、remove、set、clear以及正反向概念

半自動(dòng)創(chuàng)建

class Book(models.Model):title = models.CharField(max_length=32)authors = models.ManyToManyField(to='Author',through='Book2Author',through_fields=('book','author')# 外鍵在哪個(gè)表就把book表放前面)
class Author(models.Model):name = models.CharField(max_length=32)
class Book2Author(models.Model):book = models.ForeignKey(to='Book', on_delete=models.CASCADE)author = models.ForeignKey(to='Author', on_delete=models.CASCADE)others = models.CharField(max_length=32)join_time = models.DateField(auto_now_add=True)

優(yōu)勢(shì):第三張表完全由自己創(chuàng)建的,擴(kuò)展性強(qiáng),正反向概念依然可以使用

劣勢(shì):編寫繁瑣不再支持add、remove、set、clear

四、Django與Ajax

1.什么是Ajax

AJAX(Asynchronous Javascript And XML)翻譯成中文就是“異步的Javascript和XML”。即使用Javascript語言與服務(wù)器進(jìn)行異步交互,傳輸?shù)臄?shù)據(jù)為XML(當(dāng)然,傳輸?shù)臄?shù)據(jù)不只是XML)。ajax不是一門新的技術(shù),而是一種使用現(xiàn)有標(biāo)準(zhǔn)的新方法。它本身又很多版本,我們目前學(xué)習(xí)的是jQuery版本(版本無所謂,本質(zhì)一樣就可以)。

功能介紹:異步提交、局部刷新

優(yōu)點(diǎn):

不重新加載整個(gè)頁面的情況下,可以跟服務(wù)器交換數(shù)據(jù)并更新部分網(wǎng)頁內(nèi)容。(客戶是感覺不到的),只需要用戶允許JavaScript在瀏覽器上執(zhí)行。
1.AJAX使用JavaScript技術(shù)向服務(wù)器發(fā)送異步請(qǐng)求;
2.AJAX請(qǐng)求無需刷新整個(gè)頁面
3.因?yàn)榉?wù)器響應(yīng)內(nèi)容不再是整個(gè)頁面,而是頁面中的部分內(nèi)容,所以AJAX性能高;
4.兩個(gè)關(guān)鍵點(diǎn):異步請(qǐng)求,局部刷新

常見的場(chǎng)景

在這里插入圖片描述
搜索引擎會(huì)根據(jù)用戶輸入的關(guān)鍵字,自動(dòng)提示檢索關(guān)鍵字。其實(shí)這里就使用了AJAX技術(shù)!當(dāng)文件框發(fā)生了輸入變化時(shí),使用AJAX技術(shù)向服務(wù)器發(fā)送一個(gè)請(qǐng)求,然后服務(wù)器會(huì)把查詢到的結(jié)果響應(yīng)給瀏覽器,最后再把后端返回的結(jié)果展示出來。

這注冊(cè)過程頁面時(shí)沒有刷新的,只是刷新頁面中我們鼠標(biāo)點(diǎn)擊的局部位置,當(dāng)請(qǐng)求發(fā)出后,瀏覽器還可以進(jìn)行其他操作,無需等待服務(wù)器的響應(yīng)。

Ajax案例

我們來做一個(gè)計(jì)算的例子

ajax.html

<body>
<input type="text" id="inp1">+
<input type="text" id="inp2">=
<input type="text" id="inp3">
<button class="btn">提交</button><script>$('.btn').click(function () {  //把提交按鈕綁定一個(gè)點(diǎn)擊事件var inp1 = $("#inp1").val();var inp2 = $("#inp2").val();//把獲取到的兩個(gè)值提交到后端,讓python來計(jì)算兩個(gè)值,然后返回$.ajax({url: "",  //默認(rèn)不寫是當(dāng)前地址type: 'post',  //提交方式,默認(rèn)是getdata: {inp1: inp1, inp2: inp2},  //朝后端提交的數(shù)據(jù),KV鍵值對(duì)形式//回調(diào)函數(shù)success用來接受后端返回的數(shù)據(jù)success:function (res){console.log(res)  //打印后端返回的數(shù)據(jù)$('#inp3').val(res)  //將接受到的數(shù)據(jù)返回到inp3中}})})
</script>
</body>

views.py

from django.shortcuts import render, HttpResponse
import json# Create your views here.def ajax(request):if request.method == 'POST':'''接受ajax提交過來的數(shù)據(jù)'''d1 = request.POST.get('inp1')d2 = request.POST.get('inp2')d3 = int(d1) + int(d2)  # 轉(zhuǎn)為整型,計(jì)算值print(request.POST)  # <QueryDict: {'inp1': ['1'], 'inp2': ['1']}>return HttpResponse(json.dumps(d3))  # 序列化并返回給前端return render(request, 'ajax.html')

這個(gè)時(shí)候需要拿到后端字典里的數(shù)據(jù)要怎么做
ajax.html

<script>$('.btn').click(function () {  //把提交按鈕綁定一個(gè)點(diǎn)擊事件var inp1 = $("#inp1").val();var inp2 = $("#inp2").val();//把獲取到的兩個(gè)值提交到后端,讓python來計(jì)算兩個(gè)值,然后返回$.ajax({url: "",  //默認(rèn)不寫是當(dāng)前地址type: 'post',  //提交方式,默認(rèn)是getdata: {inp1: inp1, inp2: inp2},  //朝后端提交的數(shù)據(jù),KV鍵值對(duì)形式//回調(diào)函數(shù)success用來接受后端返回的數(shù)據(jù)success:function (res){console.log(res)  //打印后端返回的數(shù)據(jù){#res=JSON.parse(res) //反序列化json格式數(shù)據(jù),如果后端是用JsonResponse返回?cái)?shù)據(jù)就不需要前端反序列化#}console.log(res.username)console.log(res.password)  //前度想要拿到某個(gè)值就需要反序列化,后端別忘了序列化}})})
</script>

在這里插入圖片描述

views.py

from django.shortcuts import render, HttpResponse
import json
from django.http import JsonResponse# Create your views here.def ajax(request):if request.method == 'POST':'''接受ajax提交過來的數(shù)據(jù)'''user_dic = {'username':'jack','password':123}return JsonResponse(user_dic)  # 序列化并返回給前端return render(request, 'ajax.html')
http://m.aloenet.com.cn/news/44122.html

相關(guān)文章:

  • 網(wǎng)站功能介紹是什么百度應(yīng)用商店下載
  • 中國著名的網(wǎng)站建設(shè)公司百度熱搜電視劇
  • 秦皇島企業(yè)建網(wǎng)站廣東seo外包服務(wù)
  • 南京企業(yè)建設(shè)網(wǎng)站設(shè)計(jì)網(wǎng)絡(luò)推廣都是收費(fèi)
  • h5 技術(shù)做健康類網(wǎng)站網(wǎng)絡(luò)優(yōu)化公司有哪些
  • ipv6網(wǎng)站建設(shè)如何自制網(wǎng)站
  • 清河做網(wǎng)站軟文是什么意思
  • 網(wǎng)站開發(fā)需要20萬百度云網(wǎng)盤免費(fèi)資源
  • 合肥網(wǎng)站建設(shè)推廣友情鏈接怎么做
  • 西部數(shù)碼網(wǎng)站工具免費(fèi)建站平臺(tái)哪個(gè)好
  • 東陽網(wǎng)站建設(shè)dyfwzx友情鏈接吧
  • 沈陽網(wǎng)站建設(shè)建設(shè)公司排名優(yōu)化seo系統(tǒng)
  • 重慶網(wǎng)站設(shè)計(jì)公司價(jià)格丈哥seo博客工具
  • 如何搭建一個(gè)個(gè)人網(wǎng)站學(xué)校招生網(wǎng)絡(luò)營銷方案
  • 給公司網(wǎng)站設(shè)計(jì)寧波廠家關(guān)鍵詞優(yōu)化
  • 智聯(lián)招聘網(wǎng)站建設(shè)情況注冊(cè)城鄉(xiāng)規(guī)劃師好考嗎
  • jqueryui做的網(wǎng)站株洲seo排名
  • 寧波做網(wǎng)站的大公司排名關(guān)鍵詞搜索推廣排行榜
  • 如何免費(fèi)網(wǎng)站建設(shè)怎么可以在百度發(fā)布信息
  • 做網(wǎng)站運(yùn)營的女生多嗎百度公司簡(jiǎn)介
  • 上海小微企業(yè)名錄查詢seo短視頻網(wǎng)頁入口營銷
  • 公司網(wǎng)站建設(shè)北京北京做百度推廣的公司
  • 網(wǎng)站開發(fā)用啥語言廣州各區(qū)正在進(jìn)一步優(yōu)化以下措施
  • 順德做網(wǎng)站公司seo搜狗
  • 網(wǎng)站后端怎么做河北網(wǎng)站建設(shè)公司排名
  • 手機(jī)模板網(wǎng)站模板鞏義網(wǎng)站優(yōu)化公司
  • 網(wǎng)頁的動(dòng)態(tài)效果網(wǎng)店關(guān)鍵詞怎么優(yōu)化
  • 自己做網(wǎng)站需要服務(wù)器培訓(xùn)機(jī)構(gòu)查詢網(wǎng)
  • 自助申請(qǐng)海外網(wǎng)站長沙網(wǎng)絡(luò)公關(guān)公司
  • 傳統(tǒng)營銷渠道有哪些seo網(wǎng)站排名優(yōu)化培訓(xùn)教程