Django(一)

编写自己的第一个Django应用

创建项目

  • Windows环境下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
### Windows环境下
# 创建根目录也就是你项目的容器
$ mkdir mysite
# 切换到根目录
$ cd mysite/
# 建虚拟环境
$ python -m venv venv
# 进入Scripts目录
$ cd venv
$ cd Scripts
# 激活环境
$ activate
# 在虚拟环境下安装django依赖库
(venv)$ pip install django
# 查看django版本
(venv)$ django-admin --version
# 切换到根目录
(venv)$ cd ../..
# 创建项目
(venv)$ django-admin startproject mysite .
  • Linux和macOS 环境
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
## Linux和macOS 环境
# 创建项目文件夹
$ mkdir mysite
# 切换到项目目录
$ cd mysite/
# 使用venv模块创建虚拟环境,目录名venv
$ python3 -m venv venv
# 激活虚拟环境
$ source venv/bin/activate
# 更新pip到最新版本
(venv)$ python -m pip install --upgrade pip
# 使用pip安装django
(venv)$ pip install django
# 通过安装django时安装的脚本工具django-admin检查django版本
(venv)$ django-admin --version
# 开启新项目
(venv)$ django-admin startproject mysite .

好了到现在为止,我们已经创建好了自己的一个Django项目,让我们看看 startproject 创建了些什么:

1
2
3
4
5
6
7
mysite/
manage.py
mysite/
__init__.py
settings.py
urls.py
wsgi.py

下面我们简单的介绍上面每个文件是什么有什么作用

  • manage.py:用各种方式管理 Django 项目的命令行工具
  • __init__.py:一个空文件,告诉 Python 这个目录应该被认为是一个 Python 包
  • settings.py:整个Django 项目的配置文件
  • urls.py:就像是地图,负责把URL模式映射到应用程序
  • wsgi.py:用于项目部署

启动服务器

1
(venv)$ python manage.py runserver

你刚刚启动的是 Django 自带的用于开发的简易服务器,它是一个用纯 Python 写的轻量级的 Web 服务器。

现在我们用浏览器访问以下https://127.0.0.1:8000/,如果看到了小火箭那么恭喜你已经成功访问项目

Django默认端口是8000,如果你想更换服务器的监听端口,那么请运行python manage.py runserver 8080,如果你想在本地访问你服务器上的项目那么你需要执行python manage.py runserver 0:8000,python manage.py runserver 0.0.0.0:8000,这里的0相当于0.0.0.0

创建应用

一个项目下我们可以有多个应用,现在我们来创建自己的第一个应用

1
(venv)$ python manage.py startapp hrs

下面我们来看看startapp命令创建了些什么:

1
2
3
4
5
6
7
8
9
hrs/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
views.py
  • __init__.py: 一个空文件,告诉Python这个目录应该被认为是一个包
  • admin.py: 可以用来注册模型,让Django自动创建管理界面
  • apps.py: 当前应用的配置
  • migrations: 存放与模型有关的数据库信息
    • __init__.py: 也是一个空文件,告诉Python这个目录应该被认为是一个包
  • models.py:存放应用的数据模型,即实体类及其之间的关系(MVC/MVT中的M)
  • tests.py: 测试应用的各种测试函数
  • views.py: 处理请求并返回响应的函数(MVC中的C,MVT中的V)

创建一个视图

hrs/views.py

1
2
3
from django.http import HttpResponse
def home(request):
return HttpResponse('<h1>Hello, Django!</h1>')

完成后,到项目目录,修改该目录下的urls.py文件

1
2
3
4
5
6
7
8
from django.contrib import admin
from django.urls import path
from hrs import views

urlpatterns = [
path('hrs/', views.home),
path('admin/', admin.site.urls),
]

注意:我们还可以为应用单独建立一个urls.py文件来映射请求的URL,如下面:

在hrs引用下创建一个urls.py

1
2
3
4
5
6
from django.urls import path
from hrs import views

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

那么相应的我们在项目的urls.py文件中应当做出改变:

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

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

使用视图模板

在manage.py所在的同级目录下创建一个templates文件夹

接下来便是创建一个个模板页面,在这里我创建一个index.html模板页面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>首页</title>
</head>
<body>
<h1>{{ greeting }}</h1>
<h2>{{ current_time }}</h2>
<hr>
今天为你推荐{{ num }}种水果:
<ul>
{% for fruit in fruits %}
<li>{{ fruit }}</li>
{% endfor %}

</ul>
</body>
</html>

要使用模板我们要改相应的配置,切换到配置文件目录找到setting.py文件

我们需要修改TEMPLATES的配置,代码如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')], # 将DIRS路径配置成模板页面所在的路径
'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',
],
},
},
]

要渲染模板我们需要在views.py中传递参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from datetime import datetime
from random import randrange

from django.shortcuts import render


def home(req):
fruit = ['大苹果', '水晶葡萄', '大西瓜', '石榴', '桃子', '李子', '梨子']
len_f = randrange(1, len(fruit))
fruits = set()
for _ in range(len_f):
index = randrange(0, len(fruit))
fruits.add(fruit[index])

ctx = {
'greeting': '你好,世界',
'current_time': datetime.now,
'num': len(fruits),
'fruits': fruits,
}

return render(req, 'index.html', ctx)

到这里我们完成了一个简单的Django项目,现在我们将项目重新运行查看一下结果

1
(venv)$ python manage.py runserver 0:8000
-------------本文结束感谢您的阅读-------------

本文标题:Django(一)

文章作者:GavinLiu

发布时间:2017年10月29日 - 14:10

最后更新:2017年10月29日 - 14:10

原始链接:http://gavinliu4011.github.io/post/e8c9ba97.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

请博主吃个鸡腿吧
0%