背景
- Django是一个开放源代码的Web应用框架
- Django遵守BSD版权,初次发布于2005年7月, 并于2008年9月发布了第一个正式版本1.0 。
- MVC模式,即模型M(module),视图V(view)和控制器C(controller)。
M:主要对数据库层的封装
V:向用户显示数据
C:核心,处理请求,获取数据,返回结果- 高可扩展性
- 向后兼容
- 低耦合,高内聚
Django采用了MVT设计模式
m表示model,负责与数据库交互
v表示view,是核心,负责接收请求、获取数据、返回结果
t表示template,负责呈现内容到浏览器
安装
pip install Django==1.11.6
如需获取最新版,见Django安装
创建项目
- 创建HelloWorld项目
django-admin.py startproject HelloWorld
-
目录说明
- HelloWorld: 项目的容器。
- manage.py: 一个实用的命令行工具,可让你以各种方式与该 Django 项目进行交互。
- HelloWorld/init.py: 一个空文件,告诉 Python 该目录是一个 Python 包。
- HelloWorld/settings.py: 该 Django 项目的设置/配置。
- HelloWorld/urls.py: 该 Django 项目的 URL 声明; 一份由 Django 驱动的网站"目录"。
- HelloWorld/wsgi.py: 一个 WSGI 兼容的 Web 服务器的入口,以便运行你的项目。
运行第一个server
输入命令:
python manage.py runserver 0.0.0.0:8000
浏览器打开网址:127.0.0.1:8000
,如果正常打开网页,则运行正常。
- url() 函数
Django url() 可以接收四个参数,分别是两个必选参数:regex、view 和两个可选参数:kwargs、name,接下来详细介绍这四个参数。- regex: 正则表达式,与之匹配的 URL 会执行对应的第二个参数 view。
- view: 用于执行与正则表达式匹配的 URL 请求。
- kwargs: 视图使用的字典类型的参数。
- name: 用来反向获取 URL。
使用Templates
- 在项目目录下新建templates文件夹
新建html文件,如hello.html
<h1>hello world</h1>
- 添加模板路径
在settings.py文件中添加:
修改 TEMPLATES 中的 DIRS 为 [BASE_DIR+"/templates",] - 使用
view.py文件中使用:
from django.http import
模板标签
- if/else
{% if condition %}
... display
{% endif %}
- for
<ul>
{% for athlete in athlete_list %}
<li>{{ athlete.name }}</li>
{% endfor %}
</ul>
- ifequal/ifnotequal
{% ifequal section 'sitenews' %}
<h1>Site News</h1>
{% else %}
<h1>No News Here</h1>
{% endifequal %}
- 注释标签
{# 这是一个注释 #}
- 过滤器
{{ name|lower }}
{{ my_list|first|upper }}
{{ bio|truncatewords:"30" }}
其他过滤器
addslashes : 添加反斜杠到任何反斜杠、单引号或者双引号前面。
date : 按指定的格式字符串参数格式化 date 或者 datetime 对象,实例:
{{ pub_date|date:"F j, Y" }}
length : 返回变量的长度。
- include
{% include "nav.html" %}
模板继承
其中hello.html继承了base.html。
- base.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
<h1>Hello World!</h1>
<p>菜鸟教程 Django 测试。</p>
{% block mainbody %}
<p>original</p>
{% endblock %}
</body>
</html>
- hello.html
{% extends "base.html" %}
{% block mainbody %}<p>继承了 base.html 文件</p>
{% endblock %}
使用数据库MySQL
- 数据库安装
安装MySQL可参考:MySQL安装 - 数据库配置
在项目的 settings.py 文件中找到 DATABASES 配置项
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 或者使用 mysql.connector.django
'NAME': 'test', #数据库名
'USER': 'test', # 数据库用户名
'PASSWORD': 'test123', #数据库密码
'HOST':'localhost',
'PORT':'3306',
}
}
- 定义模型
要使用模型,需要创建一个app,在项目目录下使用以下命令:
django-admin.py startapp TestModel
修改 TestModel/models.py 文件,代码如下:
# models.py
from django.db import models
class Test(models.Model):
name = models.CharField(max_length=20)
定义name字段,数据类型则由CharField(相当于varchar)、DateField(相当于datetime), max_length 参数限定长度。
- 添加模型
在settings.py中找到INSTALLED_APPS这一项,如下:
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'TestModel', # 添加此项
)
- 运行迁移
$ python manage.py makemigrations TestModel # 让 Django 知道我们在我们的模型有一些变更
$ python manage.py migrate TestModel # 创建表结构
- 测试
进入shell命令
python manage.py shell
查找信息:
Test.objects.all()
- 添加数据
添加test.db文件:
# -*- coding: utf-8 -*-
from django.http import HttpResponse
from TestModel.models import Test
# 数据库操作
def testdb(request):
test1 = Test(name='runoob')
test1.save()
return HttpResponse("<p>数据添加成功!</p>")
- 修改urls.py文件:
from django.conf.urls import *
from . import view,testdb
urlpatterns = [
url(r'^hello$', view.hello),
url(r'^testdb$', testdb.testdb),
]
# -*- coding: utf-8 -*-
from django.http import HttpResponse
from TestModel.models import Test
# 数据库操作
def testdb(request):
test1 = Test(name='runoob')
test1.save()
return HttpResponse("<p>数据添加成功!</p>")
- 运行
运行命令:
python manage.py runserver 0.0.0.0:8000
打开浏览器访问:127.0.0.1:8000
创建用户组
python manage.py createsuperuser
在admin.py中注册user
admin.site.register('TestModel')
开启服务后地址后面加上/user即可进入后台管理页面,在管理页面可以可视化管理,十分方便。
部署
- 安装:
先安装uwsgi:
pip install uwsgi - 测试
新建文件test.py
# test.py
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return [b"Hello World"] # python3
#return ["Hello World"] # python2
- 运行uwsgi:
uwsgi --http :8000 --wsgi-file test.py
- uwsgi运行django
uwsgi --http :8000 --module mysite.wsgi - 安装nginx
sudo apt-get install nginx
- 部署静态文件
django settings中添加:
STATIC_ROOT = 'home/renyangfar/project/static' 运行命令收集静态文件到配置的STATIC_ROOT文件中:
python manage.py collectstatic`
- 编辑配置文件/etc/nginx/sites-enabled/default