1. 程式人生 > >django專題—數據模型、數據庫訪問、數據傳遞

django專題—數據模型、數據庫訪問、數據傳遞

template .post project table .com urn esp response 中間

四、定義數據模型

MVC中的V就是應用下的views.py和templates,C就是項目下的urls.py文件

MVC模型中的M是應用blog下的modles.py文件,專門定義數據庫


1.應用目錄blog下,modles.py文件定義數據表

說明:數據類型定義方式,在官網中有說明,如ip地址類型:https://docs.djangoproject.com/en/dev/

class Host(models.Model):
    hostname = models.CharField(max_length=50)
    ip = models.IPAddressField()


技術分享圖片技術分享圖片


2.檢查模型的語法或者邏輯是否有錯誤

python manage.py validate


技術分享圖片技術分享圖片


3.初始化數據庫

1)在項目目錄下的setting文件中,可以看到默認數據庫為sqllite3,數據庫目錄在BASE_DIR這層目錄,數據庫文件名為db.sqlite3

技術分享圖片技術分享圖片


取兩層路徑,表示當前腳本上一層目錄

技術分享圖片技術分享圖片

2)查看系統是否安裝sqlite3數據庫,沒有則yum安裝

技術分享圖片技術分享圖片


2.1)進入dbshell,熟悉sqlite3

.help #幫助

.tables #查看表

.exit #退出

技術分享圖片技術分享圖片


2.2)每次執行登錄之後,會自動生成一個db.split3文件,也可以刪掉

技術分享圖片技術分享圖片


2.3)或者這樣進入

技術分享圖片技術分享圖片


2.4)查看數據表,其中id為自動生成

技術分享圖片技術分享圖片


3)同步數據庫

命令

python manage.py syncdb


說明:會自動生成一些自帶的表,以及認證

技術分享圖片技術分享圖片


3.1)初始化之後,查看表

說明:語法和mysql基本相似

技術分享圖片技術分享圖片


4)管理數據,將數據庫數據顯示在admin頁面

修改應用blog下的admin.py文件

說明:先導入表,然後定義一個類,參數為admin模塊,繼承ModelAdmin方法;列表寫表中的字段;註冊host表和管理表

class HostAdmin(admin.ModelAdmin):
    list_display = ["hostname","ip"]
    admin.site.register(Host,HostAdmin)


技術分享圖片技術分享圖片


5)web查看,並添加數據

技術分享圖片技術分享圖片


6)數據庫上查看添加的數據

技術分享圖片技術分享圖片




五、交互式方法,訪問數據庫

1.web項目下,進入python shell,和ipython差不多,多了些環境變量

說明:在其他目錄下,看不到web路徑

技術分享圖片技術分享圖片


2.導入Host表,查看主機以及相關方法

技術分享圖片技術分享圖片


3.查看主機values

技術分享圖片技術分享圖片


4.增加數據

方法一:

n = Host(hostname="huangzp2",ip="192.168.2.232")
n.save()
nodes = Host.objects.all()
nodes.values()


技術分享圖片技術分享圖片


方法二:

n = Host()
n.hostname = "huangzp3"
n.ip = "192.168.3.233"
n.save()
node = Host.objects.all()
node.values()


技術分享圖片技術分享圖片


5.web頁面查看

技術分享圖片技術分享圖片


6.查看並修改元素

技術分享圖片技術分享圖片




六、視圖文件views.py訪問數據

1.修改web項目下urls.py文件,添加url訪問路徑

技術分享圖片技術分享圖片


2.blog下的views.py文件,定義方法方法(相當於命令行)

技術分享圖片技術分享圖片


3.web頁面查看

技術分享圖片技術分享圖片

技術分享圖片技術分享圖片



七、數據傳遞post和get

1.應用目錄下views.py定義POST訪問方法

def db(req):
    print req
    if req.POST:
        hostname = req.POST.get("hostname")
        ip = req.POST.get("ip")
        host = Host()
        host.hostname = hostname
        host.ip = ip
        host.save()
        return HttpResponse("OK")


說明:req.POST 或者 req.method == "POST"

技術分享圖片技術分享圖片


2.註釋web目錄下setting.py文件中的中間件,啟用第三方工具方法訪問

技術分享圖片技術分享圖片


3.post方法:

curl -d hostname="huangzp5" -d ip="192.168.3.235" http://192.168.2.230:8000/db/


技術分享圖片技術分享圖片


結果:

技術分享圖片技術分享圖片


瀏覽器查看

技術分享圖片技術分享圖片


4.get方法:

或者else req.GET,因為前者在訪問ip/db/時可能會報錯

def db(req):
    print req
    if req.POST:
        hostname = req.POST.get("hostname")
        ip = req.POST.get("ip")
        host = Host()
        host.hostname = hostname
        host.ip = ip
        host.save()
        return HttpResponse("OK")
    elif req.method == "get":
        hostname = req.GET.get("hostname")
        ip = req.GET.get("ip")
        host = Host()
        host.hostname = hostname
        host.ip = ip
        host.save()
        return HttpResponse("OK")
    else:
        HttpResponse("no data")


技術分享圖片技術分享圖片

技術分享圖片

瀏覽器傳值:

192.168.2.230:8000/db/?hostname=huangzp6&ip=192.168.3.236


技術分享圖片技術分享圖片


瀏覽器查看:

技術分享圖片技術分享圖片


django專題—數據模型、數據庫訪問、數據傳遞