Django基本命令

创建project

1
$django-admin startproject myproject

进入myproject目录

使用开发服务器

1
$ python manage.py runserver

会报错

1
You're accessing the development server over HTTPS, but it only supports HTTP.

django 默认的runserver使用的是http协议,如果需要https协议,需要以下3个库

1
2
3
django-extensions 
django-werkzeug-debugger-runserver
pyOpenSSL

安装

1
2
3
4
5
pip install django-extensions

pip install django-werkzeug-debugger-runserver

pip install pyOpenSSL

配置django的settings.py文件

在INSTALLED_APPS下添加

1
2
3
'werkzeug_debugger_runserver',

'django_extensions',

在终端以https的方式运行

1
$python manage.py runserver_plus --cert server.crt

创建APP

1
$ python manage.py startapp learn

创建数据库表或更改数据库表或字段

1
2
3
4
# 1. 创建更改的文件
python manage.py makemigrations
# 2. 将生成的py文件应用到数据库
python manage.py migrate

清空数据库

1
$python manage.py flush

创建超级管理员

1
2
3
4
5
6
$python manage.py createsuperuser

# 按照提示输入用户名和对应的密码就好了邮箱可以留空,用户名和密码必填

# 修改 用户密码可以用:
$python manage.py changepassword username

Django项目环境终端

1
$python manage.py shell

数据库命令行

1
$python manage.py dbshell

Django 会自动进入在settings.py中设置的数据库,如果是 MySQL 或 postgreSQL,会要求输入数据库用户密码。

在这个终端可以执行数据库的SQL语句。如果对SQL比较熟悉,可能喜欢这种方式。

视图

在/views.py中输入代码

1
2
3
4
5
from django.http import HttpResponse


def index(request):
return HttpResponse("Hello, world. You're at the learn index.")

如果想看见效果,我们需要将一个 URL 映射到它

为了创建 URLconf,请在 learn目录里新建一个 urls.py 文件。

在urls.py中输入代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
from django.urls import path

from . import views

urlpatterns = [
path('', views.index, name='index'),
]

'''
path函数有四个参数
两个必须参数:route 和 view,两个可选参数:kwargs 和 name。

@route:
route 是一个匹配 URL 的准则(类似正则表达式)。当 Django 响应一个请求时,它会从 urlpatterns 的第一项开始,按顺序依次匹配列表中的项,直到找到匹配的项。

这些准则不会匹配 GET 和 POST 参数或域名。例如,URLconf 在处理请求 https://www.example.com/myapp/ 时,它会尝试匹配 myapp/ 。处理请求 https://www.example.com/myapp/?page=3 时,也只会尝试匹配 myapp/。

@view:
当 Django 找到了一个匹配的准则,就会调用这个特定的视图函数,并传入一个 HttpRequest 对象作为第一个参数,被“捕获”的参数以关键字参数的形式传入。稍后,我们会给出一个例子。

@kwargs:
任意个关键字参数可以作为一个字典传递给目标视图函数。

@name:
为你的 URL 取名能使你在 Django 的任意地方唯一地引用它,尤其是在模板中。这个有用的特性允许你只改一个文件就能全局地修改某个 URL 模式。
'''

下一步是要在根 URLconf 文件中指定我们创建的 learn.urls 模块。在 vx/urls.py 文件的 urlpatterns 列表里插入一个 include(), 如下:

1
2
3
4
5
6
7
from django.contrib import admin
from django.urls import include, path

urlpatterns = [
path('learn/', include('learn.urls')),
path('admin/', admin.site.urls),
]

函数 include()允许引用其它 URLconfs。每当 Django 遇到 :func:~django.urls.include时,它会截断与此项匹配的 URL 的部分,并将剩余的字符串发送到 URLconf 以供进一步处理。

我们设计 include()的理念是使其可以即插即用。因为应用有它自己的URLconf( vx/urls.py ),他们能够被放在"/vx/" , "/fun_vx/" ,"/content/vx/",或者其他任何路径下,这个应用都能够正常工作。

当包括其它 URL 模式时你应该总是使用 include()admin.site.urls 是唯一例外。

运行

1
$python manage.py runserver_plus --cert server.crt

访问.../learn即可看见简单的文字视图

数据库配置

vx/settings.py是Django项目设置的python模块。

通常,这个配置文件使用 SQLite 作为默认数据库。如果你不熟悉数据库,或者只是想尝试下 Django,这是最简单的选择。Python 内置 SQLite,所以你无需安装额外东西来使用它。当你开始一个真正的项目时,你可能更倾向使用一个更具扩展性的数据库,例如 PostgreSQL,避免中途切换数据库这个令人头疼的问题。

如果你想使用其他数据库,你需要安装合适的 database bindings ,然后改变设置文件中 DATABASES 'default' 项目中的一些键值:

  • ENGINE — 可选值有 'django.db.backends.sqlite3''django.db.backends.postgresql''django.db.backends.mysql',或 'django.db.backends.oracle'。其它 可用后端
  • NAME - 数据库的名称。如果使用的是 SQLite,数据库将是你电脑上的一个文件,在这种情况下, NAME 应该是此文件的绝对路径,包括文件名。默认值 os.path.join(BASE_DIR, 'db.sqlite3') 将会把数据库文件储存在项目的根目录。

在编辑/settings之前,将TIME_ZONE设置为自己所在时区

通常, INSTALLED_APPS 默认包括了以下 Django 的自带应用:

这些应用被默认启用是为了给常规项目提供方便。

默认开启的某些应用需要至少一个数据表,所以,在使用他们之前需要在数据库中创建一些表。

1
$python manage.py migrate

创造模型

在 Django 里写一个数据库驱动的 Web 应用的第一步是定义模型 - 也就是数据库结构设计和附加的其它元数据。

在learn/models.py中创建python类

激活模型

创建模型的代码给了 Django 很多信息,通过这些信息,Django 可以:

  • 为这个应用创建数据库 schema(生成 CREATE TABLE 语句)。
  • 创建可以与 QuestionChoice 对象进行交互的 Python 数据库 API。

但是首先得把 learn 应用安装到我们的项目里。

为了在我们的工程中包含这个应用,我们需要在配置类 INSTALLED_APPS 中添加设置。因为 learnConfig 类写在文件 learn/apps.py 中,所以它的点式路径是 'learn.apps.learnConfig'。在文件 mysite/settings.pyINSTALLED_APPS 子项添加点式路径。

运行命令进行模型迁移

1
$python manage.py  makemigrations learn

运行migrate命令在数据库里创建新定义的模型的数据表

1
$python manage.py migrate

迁移是非常强大的功能,它能让你在开发过程中持续的改变数据库结构而不需要重新删除和创建表 - 它专注于使数据库平滑升级而不会丢失数据。我们会在后面的教程中更加深入的学习这部分内容,现在,你只需要记住,改变模型需要这三步: