天天看点

Django搭建第一个应用

我们来从头到尾搭建一个app,让数据库中的数据能够传递给前台,显示在网页中。

ref:http://blog.csdn.net/viease/article/details/45093875

创建一个工程

cd 到要创建工程的文件夹下,执行命令:

django-admin startproject my_project
           

创建第一个页面

my_project/my_project文件夹中创建文件:

views.py

from django.http import HttpResponse

def first_page(request):
    return HttpResponse("Cool snow!")
           

创建URL和函数之间的映射,编辑urls.py文件:

from django.conf.urls import url,include
from django.contrib import admin
from views import first_page#引入对应的函数

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^$', first_page),#添加映射
]
           

这个时候启动服务器,

python manage.py runserver
           

结果:

Django搭建第一个应用

创建一个app

tip:Django只有在app里面才能引用数据库,所以必须创建app

在外层my_project文件夹下,terminal执行:

python manage.py startapp app1
           

配置settings.py:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app1',#添加我们自己的app
]
           

配置应用对应的urls.py

(注意这里是在my_project/my_project/urls.py,不是app1文件夹中的urls.py)

from django.conf.urls import url,include
from django.contrib import admin
from views import first_page

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^$', first_page),
    url(r'^app1/', include('app1.urls')),#添加这句
]
           

修改app1视图文件:

app1/views.py

from django.http import HttpResponse
def first_page(request):
    return HttpResponse("happy snow!")
           

配置app1内部URL映射:

app1/urls.py

from django.conf.urls import url,include
from django.contrib import admin
from views import first_page# add

urlpatterns = [
    url(r'^$', first_page)
]
           
Django搭建第一个应用

上面的结果就对了,注意体会链接的形式

配置数据库

my_project/my_project/settings.py

# DATABASES = {
#     'default': {
#         'ENGINE': 'django.db.backends.sqlite3',
#         'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
#     }
# }
# 注释掉原来的数据库,添加我们的Mysql
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'snowtest0106', #我们数据库名称
        'USER': 'root',
        'PASSWORD': '******', #填写你的密码
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }
}
           

my_project/my_project/_init_.py

import pymysql
pymysql.install_as_MySQLdb()
           

检查是否连接成功:

python manage.py shell
>>>from django.db import connection
>>>cursor = connection.cursor()
           
Django搭建第一个应用

不报错就对了

使用数据库

编辑models.py

from __future__ import unicode_literals

from django.db import models

# Create your models here.

class myStudent(models.Model):
    def __str__(self):
        return self.name
    name = models.CharField(max_length=)
           

terminal执行

python manage.py makemigrations app1
python manage.py migrate
           

这个时候,再去看我们的数据库,就有刚刚创建的表了,我是用navicat来管理数据库的:

Django搭建第一个应用

这里,我在数据库里面添加了一条记录,snowy,一会儿访问数据库的时候要用到

数据库中的id字段是django在创建数据库的时候自动添加的

让数据库的内容显示到网页中

app1/views.py

from django.http import HttpResponse
from models import myStudent

def first_page(request):
    student_list = myStudent.objects.all()
    student_str = map(str, student_list)
    return HttpResponse("<p>" + ''.join(student_str) + "</p>")
           

启动服务器,运行:

Django搭建第一个应用

这时候,数据库里面的snowy被显示出来

到此,我们的目标已经大致完成了,但是可以看出来,这种方式,虽然实现了结果,但是并不符合django的MVC编程思想。我们要把模板和数据分开来,怎么办呢?

my_project目录下创建template文件,并添加我们的模板html,这里是hello.html

Django搭建第一个应用

hello.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
{{hello}}
</body>
</html>
           

修改settings.py:’DIRS’: [BASE_DIR+”/templates”,],

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [BASE_DIR+"/templates",],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]
           

app1/views.py

from models import myStudent
from django.shortcuts import render

def first_page(request):
    student_list = myStudent.objects.all()
    student_str = map(str, student_list)
    context = {}
    context['hello'] = ''.join(student_str)
    # context['hello'] = 'hello yibo'
    return render(request, 'hello.html',context)
           

这个时候启动服务器,运行:

Django搭建第一个应用

大功告成

跟上面的结果一样,但是逻辑不一样哦~