Django簡單數據庫交互演示

官方文檔纔是最好懂的:官方文檔html

首先先回顧一些基礎工做

新建工程:前端

django-admin.py startproject mysite

  

建立應用blog:python

進入manage.py同級目錄開命令行mysql

python manage.py startapp blog

添加應用名到setting.py installed_apps 裏sql

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'blog',
]

 運行命令是數據庫

python manage.py runserver

 多的嘛就先不談了。django

使用models模塊在數據庫中建立數據表

首先鏈接數據庫

在setting裏,engine是mysql的默認選項,使用mysql的玩家都用這一條。改一下name,user,password而後就能夠試試能不能用了(直接runserver,若是鏈接不上會報錯)。瀏覽器

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'blogs',
        'USER': 'root',
        'PASSWORD': '123456',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }
}

 使用models模塊

在建立的app(blog)下找到models.py,編輯這段代碼bash

from django.db import models

class Person(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)

 它等價於服務器

CREATE TABLE myapp_person (
    "id" serial NOT NULL PRIMARY KEY,
    "first_name" varchar(30) NOT NULL,
    "last_name" varchar(30) NOT NULL
);

 咱們只須要在確認鏈接的狀況下使用下面兩個命令

python manage.py makemigrations
python manage.py migrate

 就能夠在數據庫中建立表了。關於其餘細節,如field的設置,需參看文檔

實現與數據庫的交互  

從數據庫存取數據到展現到前端頁面,不得不談這三個東西。或者說,一個頁面一般具備典型的三個組件

一個模板(template):模板負責把傳遞進來的信息顯示出來。

一個視圖(view):視圖負責從數據庫獲取須要顯示的信息。

一個URL模式:它負責把收到的請求和你的試圖函數匹配,有時候也會向視圖傳遞一些參數。

要想讓他們工做起來,方法多種多樣。文檔上也有很多。

 下面將以一個具體簡單的例子來展現他們是如何工做的。固然先展現一發個人目錄結構

我今天就是要展現這個templates下的index.固然這個是建立blog應用後我手動建立的。index寫的內容以下

<p> fuck</p>
{% for post in blog_list %}
    <h2>{{ post.title }}</h2>
    <p>{{ post.timestamp }}</p>
    <p>{{ post.body }}</p>
{% endfor%}

 用的是html+模板語法。要使它工做,我須要使用view的功能:從數據庫獲取信息,並幹一些其餘的事:

如今假如個人應用下的models是這樣寫的

from __future__ import unicode_literals

from django.db import models

# Create your models here.
#from django.db import models
from django.contrib import admin

# Create your models here.
class BlogsPost(models.Model):
    title = models.CharField(max_length = 150)
    body = models.TextField()
    timestamp = models.DateTimeField()


class BlogPostAdmin(admin.ModelAdmin):
    list_display = ('title', 'timestamp')


admin.site.register(BlogsPost, BlogPostAdmin)

定義的blogpost的功能在前面models裏有說明---它是能夠用來建立表的

如今我將它在views裏import一下,而後調用.object().all()方法將該表在數據庫中的內容所有取出,以下

from __future__ import unicode_literals


from blog.models import BlogsPost
from django.http import HttpResponse
from django.template import loader



# Create your views here.
def index(request):
    blog_list = BlogsPost.objects.all()
    template = loader.get_template('index.html')
    return HttpResponse(template.render({'blog_list':blog_list}, request))

而後用template模板的方法搞一發這個index.html,使得它結合數據庫的內容生成一個純html文檔,讓它在須要響應的時候返回。

如今就到了urls文件發揮做用的時候了

這個是blog/ulrs下的內容。就是要服務器在收到請求的時候按照views裏的index方法來返回

from django.conf.urls import url

from . import views

urlpatterns = [
    url(r'^$', views.index),
]

 而後在misite/urls裏include一下,至於爲何這就涉及到urls的用法了。urls至關於一個「路由」,將請求送到相應的方法中去。以下展現的就是mysite/urls

"""mysite URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/1.11/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  url(r'^$', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  url(r'^$', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.conf.urls import url, include
    2. Add a URL to urlpatterns:  url(r'^blog/', include('blog.urls'))
"""
from django.conf.urls import url,include
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^blog/',include('blog.urls')),
]

以後runserver

用瀏覽器訪問127.0.0.1:8000/blog,就能夠看到index頁面的結果了 

相關文章
相關標籤/搜索