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页面的结果了 

相关文章
相关标签/搜索