官方文檔纔是最好懂的:官方文檔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
在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', } }
在建立的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頁面的結果了