Django介绍
- 什么是Django:
Django是一个基于Python的高级web开发框架,它能够让开发人员进行高效且快速的开发。高度集成(不同重复造轮子),免费且开源。
- 搭建环境:
安装Python,Python官网下载安装包安装即可,过程略。
安装Django:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple Django==2.2.5
或者下载源码tar包,进入解压目录执行python setup.py install
- 创建项目:
在Windows命令行下(在Linux下也适用),
cd Desktop
mkdir myblog
cd myblog
django-admin startproject myblog #未报错则创建成功
- 启动项目:
命令行下,
cd myblog
python manage.py runserver 9999
浏览器访问127.0.0.1:9999
即可访问django默认页
Django默认Debug=True
,即在调试模式下,后面无须手动重启服务器,除非代码报错服务器宕掉。
Django Shell
Django Shell是一个Python的交互式命令行程序,它自动引入了项目环境,我们可以使用它与项目进行交互。
在命令行下,执行python manage.py shell
进入Django Shell。
在Django Shell下,可以尝试一下 Django 为你创建的各种 API。通常使用Django Shell进行一些调试工作,测试未知的方法。
创建应用
- PyCharm打开项目:
使用PyCharm打开桌面上的目录myblog下的myblog目录,有个与manage.py
同级的myblog目录,其中有这些文件:
wsgi.py python应用与wen服务器之间的接口
urls.py url配置文件,所有页面都需要配置url
settings.py 项目的总配置文件,包含数据库、web应用、时间等配置
__init__.py python中声明模块的文件,内容默认为空
- 创建应用:
打开命令行,进入项目中manage.py
所在的目录,执行:
python manage.py startapp blog
并添加应用名到settings.py
中的INSTALLED_APPS
中。
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog',
]
应用名不能与python中模块名相同,否则会创建失败。
新生成的与manage.py
同级的blog目录中有这些文件:
migrations 数据移植(迁移)模块,内容自动生成
__init__.py
__init__.py
admin.py 该应用的后台管理系统配置
apps.py 该应用的一些配置
models.py 数据模块,使用ORM框架,类似于MVC结构中的Models
tests.py 自动化测试模块,在这里编写测试脚本
views.py 执行响应的代码所在模块,代码逻辑处理的位置
- 创建一个页面响应:
views.py
from django.shortcuts import render
# Create your views here.
from django.http import HttpResponse
def index(request):
return HttpResponse('Hello World')
urls.py
from django.contrib import admin
from django.urls import path
import blog.views as bv
urlpatterns = [
path('admin/', admin.site.urls),
path('index/', bv.index),
]
浏览器访问127.0.0.1:9999/index/
每个响应对应一个函数,函数必须返回一个响应。函数必须存在一个参数,一般约定为request,每个响应(函数)对应一个url。
每个url都以url的形式写出来,url函数放在urlpatterns列表中。url函数三个参数:url(正则),对应方法,名称。
- 重新配置url:
urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('blog/', include('blog.urls')),
]
同时在blog应用目录下新增 urls.py
from django.urls import path
from . import views
urlpatterns = [
path('index/', views.index),
]
浏览器访问127.0.0.1:9999/blog/index/
项目的根urls.py针对APP配置的url名称,是该APP所有url的总路径。
开发Template
Django的Template就是一个个的HTML文件,使用了Django模板语言(DTL),template可以使用第三方模板(如Jinja2)。
- 开发一个template:
在应用blog目录下创建名为Templates
的目录,在Templates目录下创建index.html文件。
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>Hello, Blog!</h1>
</body>
</html>
接着在views.py中返回render()
from django.shortcuts import render
# Create your views here.
from django.http import HttpResponse
def index(request):
return render(request, 'index.html')
浏览器访问127.0.0.1:9999/blog/index/
- DTL初步使用:
render()
函数中支持一个dict类型参数,该字典是后台传递到模板的参数,key为参数名,在模板中直接通过{
{参数名}}
来使用参数。
views.py
from django.shortcuts import render
# Create your views here.
from django.http import HttpResponse
def index(request):
return render(request, 'index.html', {
'hello': 'Hello, Blog!!!'})
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>{
{ hello }}</h1>
</body>
</html>
浏览器访问127.0.0.1:9999/blog/index/
- Django查找template:
Django按照INSTALLED_APPS
中的添加顺序查找template,不同APP下Templates目录中的同名html文件会造成冲突。
解决冲突:
在APP的Templates目录下创建以APP名为名称的目录,将html文件放入该目录下。
views.py
from django.shortcuts import render
# Create your views here.
from django.http import HttpResponse
def index(request):
return render(request, 'blog/index.html', {
'hello': 'Hello, Blog123!'})
浏览器访问127.0.0.1:9999/blog/index/
编写Models
通常,一个Model对应数据库的一张数据表。Django中Models以类的形式表现,它包含一些基本字段以及数据的一些行为。
ORM即对象关系映射(Object Relation Mapping),实现了对象和数据库之间的映射,隐藏了数据访问的细节,不需要编写SQL语句。
- 编写models:
在应用blog目录下的 models.py(默认已引入models模块)中创建类,继承models.Model
,该类即为一张数据表,在类中创建属性(变量)即相当于在数据表中创建字段。
models.py
from django.db import models
# Create your models here.
class Article(models.Model):
title = models.CharField(max_length=32, default='Title')
content = models.TextField(null=True)
- 生成数据表
命令行下进入manage.py
同级目录,执行
python manage.py makemigrations app名(可选)
python manage.py migrate
这里可以不加应用名,就是为项目下的所有应用生成数据表。
Django会自动在app名/migrations/
目录下生成移植文件。命令行下查看SQL语句,执行
python manage.py sqlmigrate app名 文件id
- 查看并编辑db.sqlite3:
使用第三方软件SQLite EXpert Personal,打开与manage.py
同级的db.sqlite3文件。
找到blog_article这个表,使用+
添加一行:title为Hello
,content为Hello, Blog!
,再使用√
保存即可。
- 页面呈现数据:
views.py
from django.shortcuts import render
from . import models
def index(request):
#获取主键为1的article
article = models.Article.objects.get(pk=1)
return render(request, 'blog/index.html', {
'article': article})
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</t