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

结果:
这里写图片描述
创建一个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)
]

这里写图片描述
上面的结果就对了,注意体会链接的形式
配置数据库
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()

这里写图片描述
不报错就对了

使用数据库
编辑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=20)

terminal执行

python manage.py makemigrations app1
python manage.py migrate

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

这里,我在数据库里面添加了一条记录,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>")

启动服务器,运行:
这里写图片描述
这时候,数据库里面的snowy被显示出来


到此,我们的目标已经大致完成了,但是可以看出来,这种方式,虽然实现了结果,但是并不符合django的MVC编程思想。我们要把模板和数据分开来,怎么办呢?
my_project目录下创建template文件,并添加我们的模板html,这里是hello.html
这里写图片描述

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)

这个时候启动服务器,运行:
这里写图片描述

大功告成

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值