初识 Django

Posted by QXSoftware on July 2, 2017

Django 是一个重量级的 Web 框架,很多成功的网站和 App 都是基于 Django 开发的。

Django 开发必备

  • Python3
  • PyCharm Community Edition

Django 使用 python 开发,推荐安装 Python3,并且使用 pip 安装 django:

pip install django

PyCharm 是用于 python 开发的 IDE,Jetbrains 出品,支持调试 python。

PyCharm 社区版是开源免费的,初学者开发 Django 足够了

Django 基本操作

创建项目

Django 项目是一个模块,其特点是项目本身是一个文件夹(mysite),其中会包含一个 init.py 文件(python 模块儿的特点)。

django-admin startproject mysite

创建 App

一个 Django 项目由多个 App 组成。每个 App 也是一个 python 模块儿。

cd mysite
python manage.py startapp myapp

完成这一步后,项目的结构如下:

mysite
|__ mysite # 项目文件夹
|   |__ __init__.py
|   |__ settings.py # 主配置文件
|   |__ urls.py # url 路由文件,不同的 url 转到不同应用的 view
|   |__ wsgi.py # 网络服务器网关接口
|__ myapp # 应用文件夹
|   |__ __init__.py
|   |__ admin.py # 用于定制本应用在 Django 后台管理界面如何显示
|   |__ apps.py
|   |__ models.py # 用于定制本应用的 Model,以及在数据库中创建什么表
|   |__ tests.py
|   |__ views.py # 本应用的视图,负责页面表现
|__ manage.py # Django 管理脚本

编写路由

mysite 项目的 urls.py 文件是负责处理不同 url 的路由的,比如想要 http://127.0.0.1:8000/index/ 转向 myapp 的视图, 则需要修改 urlpatterns 为如下:

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^index/$', views.index), # 增加了这一行,处理 index/ 路径
]

编写视图逻辑

myapp 的视图逻辑在 view.py 文件中,其中需要定义一个接受 request 的方法:

from django.shortcuts import HttpResponse

def index(request):
	return HttpResponse('Hello World!')

运行 Web 服务

python manage.py runserver 127.0.0.1:8000

这时在编辑器中输入 http://127.0.0.1:8000/index/ 就可以看到页面了。

添加 html 模板以及静态资源

在如下位置添加 static 和 templates 文件夹:

mysite
|__ mysite
|__ myapp
|__ static # 静态资源文件夹
|__ templates # html 模板文件夹
|__ manage.py

添加了以上两个文件夹后,还需要告诉 Django 去哪里找到,于是修改 settings.py:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            os.path.join(BASE_DIR, 'templates'),
        ], # 告诉 Django 新加的 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',
            ],
        },
    },
]

....

STATIC_URL = '/static/'

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
] # 以及新加的 static 文件夹在哪

在 static 文件夹中添加 imgs/dog.jpg 图片,并且在 templates 文件夹中增加一个 index.html 模板文件:

<!DOCTYPE html>
<html lang="zhcn">
<head>
    <meta charset="UTF-8">
    <title>Test</title>
</head>
<body>
    <h1 style="background-color:#123456;color:white;">Hello World!</h1>
    <img src="/static/imgs/dog.jpg" />
</body>
</html>

同时修改 views.py 的 index 方法:

def index(request):
    return render(request, 'index.html')

使用数据库

使用数据库之前,首先需要在 mysite 中注册 myapp,这同样是通过修改 settings.py 实现的:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'myapp', # 注册 myapp 到 mysite
]

注册了 myapp 之后,Django 就知道给哪个 app 创建数据库表了。

然后在 models.py 中创建对应的 Model,这对应于数据库中的表:

from django.db import models

class User(models.Model):
    name = models.CharField(max_length=32)
    desc = models.CharField(max_length=32)

上面这个例子表示会创建一个表,其中有两个字段:name 和 desc。

再运行以下命令执行创建:

python manage.py makemigrations
python manage.py migrate

使用模板

可以在 views.py 中给模板传递数据:

def index(request):
    models.DemoModel.objects.create(name='123',desc='456',age=666)
    models.DemoModel.objects.update()
    ctx = {
        'data' : models.DemoModel.objects.all()
    }
    return render(request, 'index.html', ctx)

这里给模板传递了 data 参数,这是一个字典。修改 index.html 为如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>哈哈</title>
</head>
<body>
<h1 style="background:#123456; color:#ffffff">以下是数据库信息</h1>

</body>
</html>

关于 Django 的模板语言,可以参考 https://www.runoob.com/django/django-template.html

定制 admin 页面

可以在 myapp 的 admin.py 中注册自定义的 model,这样就可以在管理员页面中进行数据库的增删操作。

from django.contrib import admin
from myapp.models import User

admin.site.register([User])

创建一个管理员账号

python manage.py createsuperuser

按照提示输入用户名、邮箱、密码即可。

参考资料


转载请注明出处:

This work is licensed under a MIT License.