Django简单数据库交互演示

官方文档才是最好懂的:官方文档

首先先回顾一些基础工作

新建工程:

django-admin.py startproject mysite

  

创建应用blog:

进入manage.py同级目录开命令行

python manage.py startapp blog

添加应用名到setting.py installed_apps 里

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

 多的嘛就先不谈了。

使用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,编辑这段代码

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

 

posted on 2017-11-24 19:28  此剑之势愈斩愈烈  阅读(324)  评论(0编辑  收藏  举报

导航