Mki's Blog

Django学习(一):入门

Django学习(一):入门

安装

Django是基于python的一个Web框架,因此首先要有python。

sudo apt-get install python3

利用pip安装

sudo apt-get install python3-pip
python3 -m pip install django

若返回版本号则成功安装。

python3 -m django --version

初始化

Django不需要把项目放在/var/www/html目录下面,可以是任意目录。

python3 -m django startproject [name]

我把[name] 设置成site1了,注意这个命名最好不要是django或者python这样危险的名字。

mki@Server1:/xxx/study_Django$ ls -R site1/
site1/:
manage.py  site1

site1/site1:
__init__.py  settings.py  urls.py  wsgi.py

可以看到初始化之后的site1的目录结构是上面这样的,简单介绍一下。

- manage.py    管理项目的命令行工具
- __init__.py  空文件,告诉python这个目录该被认为是一个python包
- settings.py  项目的配置文件
- urls.py      URL声明
- wsgi.py      wsgi入口

运行项目

在manager.py的目录下

python3 manage.py runserver

发现报错

You have 15 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.

按提示运行即可

python3 manage.py migrate

更换端口

python3 manage.py runserver [port]

这个时候访问 http://127.0.0.1:port 就能看到一个页面了.

新建应用

应用和项目有什么区别呢,一个项目可以包含很多个应用,一个应用可以被很多个项目使用。

python3 manage.py startapp [name]

我把这个应用名字设置为vote。

要让这个应用发挥作用,首先我们要能够访问到它,而要访问到这个应用,首先要配置路由。

配置路由

假设这个应用该用 /vote这样的方式来访问到。

项目路由

先在总项目的 urls.py 里添加一个路径

from django.urls import include,path  //调用include 和 path

urlpatterns = [
    path('vote/', include('vote.urls')), //这是我们新增加的路径配置
]

此时,当我们访问 /vote的时候,django会到vote/urls.py里面寻找下一步操作。

接下来,需要配置应用内部的路由了。

应用路由

配置vote/urls.py文件

from django.urls import path
from . import views  //一些目标函数在的文件

urlpatterns = [
    path('', views.index, name='index'),  //访问 xxx/vote/ 时
    path('test', views.Go, name='1111')   //访问 xxx/vote/test 时
]

这里要解释一下path函数

path(route, view, kwargs, name)
- route 匹配URL的一个类似正则表达式的准则   (必填)
- view  匹配到路径后要调用的函数,并传入HttpRequest对象 (必填)
- kwargs 作为字典穿给目标函数  (选填)
- name   URL命名 (选填)

配置数据库

设置数据库

在这里设置数据库,可选选项有很多 django.db.backends.(xxx)

xxx处可以是sqlite3 postgresql mysql oracle

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

这里从最简单的SQLite入手。

设置时区

TIME_ZONE = 'Asia/Shanghai'

创建默认数据表

因为某些内置应用假如要开启,就必须至少有一张表

python3 manage.py migrate

migrate指令会检查 INSTALLED_APPS这个数组的内容。

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

这是一些内置应用,可以注释掉来取消内置。按需操作。

设计模型

Django里面的 数据库结构及其他设计是和模型息息相关的

设置vote/models.py文件

from django.db import models

class Question(models.Model):
    question_text = models.CharField(max_length=200)  //CharField字段类型
    pub_date = models.DateTimeField('date published') //DateTimeField字段类型

class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)  //定义关系 question和choice关联
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

不难看出,每个新模型都是 django.db.models.Model的子类

激活模型

通过上面的模型,django可以创建一个新的数据库,而要激活这个模型,首先要将我们的应用添加到配置里。

site1/settings.py

INSTALLED_APPS = [
    'vote.apps.VoteConfig',  //添加我们的vote应用
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

迁移是数据库结构变化的储存形式。

python3 manage.py makemigrations  // 为模型的改变生成迁移文件
python3 manage.py migrate         //应用迁移

命令行Shell API

python3 manage.py shell  //进入命令行管理模式

管理界面

创建superuser

首先要创建管理员

python3 manage.py createsuperuser

依次设定用户名/邮箱/密码

启动服务器,访问管理员界面。 xxx/admin

添加应用

我们在管理员界面里面是找不到我们的的vote应用的,因为我们没有告诉项目这个应用需要被管理。

修改vote/admin.py文件

from django.contrib import admin
from .models import Question

admin.site.register(Question)

这时刷新页面就可以看到vote了。