创建mysite工程项目,创建项目的命令如下:
# django-admin startproject 项目名称
django-admin startproject mysite
进入mysite目录,工程目录结构默认如图
与项目同名的目录,此处为mysite,包含项目的配置文件
- manage.py : Django 项目里面的工具,是项目运行的入口,指定配置文件路径,通过它可以调用django shell和数据库等。
- setting.py : 包含了项目的默认配置,包括数据库信息,调试标志以及其他一些工作的变量,是项目的整体配置文件。
- urls.py : 负责把URL模式映射到应用程序,是项目的URL配置文件。
- init.py是一个空文件,作用是这个目录test1可以被当作包使用。
- wsgi.py是项目与WSGI兼容的Web服务器入口。
运行服务
- 运行服务器命令如下:
# python manage.py runserver ip:端口
python manage.py runserver
- 可以不写ip
- 默认端口为8000
- 服务器成功启动后如下图
浏览器访问 http://127.0.0.1:8000/,运行结果如图所示
创建blog应用
python manage.py startapp blog
blog目录结构如图所示
- init.py是一个空文件,表示当前目录blog可以当作一个python包使用
- tests.py文件用于开发测试用例,在实际开发中会有专门的测试人员,这个事情不需要我们来做
安装添加应用
- 应用创建成功后,需要安装才可以使用
- 在mysite/settings.py文件中INSTALLED_APPS下添加应用的名称就可以完成安装
- 在元组列表末尾中添加一个新的项,当前示例为blog
设计模型
现在打开blog目录下的models.py文件,这是定义blog数据结构的地方。
from django.db import models
# Create your models here.
class BlogPost(models.Model):
# 博客标题
title=models.CharField(max_length=150)
# 博客正文
body=models.TextField()
# 博客创建时间
timestamp=models.DateTimeField()
创建BlogPost博客类,继承django.db.models.Model父类,定义3个变量:title(博客标题)、body(博客正文)、timestamp(博客创建时间)
迁移
- 默认采用sqlite3数据库
- 迁移前目录结构如下图:
- 迁移由两步完成
- 1.生成迁移文件:根据模型类生成创建表的语句
- 2.执行迁移:根据第一步生成的语句在数据库中创建表
- 生成迁移文件命令如下:
python manage.py makemigrations
- 执行迁移命令如下:
python manage.py migrate
- 迁移后目录结构如下图:
管理界面本地化
- 本地化是将显示的语言、时间等使用本地的习惯,这里的本地化就是进行中国化,中国大陆地区使用简体中文,时区使用亚洲/上海时区,注意这里不使用北京时区表示
- 打开mysite/settings.py文件,找到语言编码、时区的设置项,将内容改为如下
LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'
创建管理员
- 创建管理员的代码如下,按提示输入用户名、邮箱、密码
python manage.py createsuperuser
- 启动服务器
python manage.py runserver
- 打开浏览器,在地址栏中输入如下地址后回车
http://127.0.0.1:8000/admin
- 输入前面创建的用户名、密码完成登录
- 登录成功后界面如下,但是并没有BlogPost的管理入口,接下来进行增加BlogPost的管理入口操作
注册模型类
- 登录后台管理后,默认没有我们创建的应用中定义的模型类,需要在自己应用中的admin.py文件中注册,才可以在后台管理中看到,并进行crud操作
- 打开booktest/admin.py文件,编写如下代码
from django.contrib import admin
from blog.models import BlogPost
admin.site.register(BlogPost)
- 到浏览器中刷新页面,可以看到模型类BlogPost的管理了
- 点击类名称“BookInfo”可以进入列表页,
- 在列表页中点击“增加”可以进入增加页,Django会根据模型类的不同,生成不同的表单控件,按提示填写表单内容后点击"保存",完成数据创建,创建成功后返回列表页
自定义管理页面
- Django提供了自定义管理页面的功能,比如列表页要显示哪些值
- 打开mysite/admin.py文件,自定义类,继承自admin.ModelAdmin类
- 属性list_display表示要显示哪些属性
自定义管理页面之前
打开mysite/admin.py文件,自定义类,继承自admin.ModelAdmin类
from django.contrib import admin
from blog.models import BlogPost
class BlogPostAdmin(admin.ModelAdmin):
# pk:索引
# 属性list_display表示要显示哪些属性
list_display = ['pk','title','body','timestamp']
admin.site.register(BlogPost,BlogPostAdmin)
自定义管理界面之后
创建blog的公共部分
从django的角度来看,一个页面具有3个典型的组件
- templates (模板) :模板负责把传递进来的信息显示出来
- view (视图) :视图负责从数据库获取需要显示的数据
- url (URL模式) :URL模式负责把收到的请求与视图函数匹配,有时也会向视图传递一些参数
创建模板
在blog项目中创建templates文件夹目录(mysite/blog/templates/)在目录中创建模板文件archive.html,代码如下
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% for post in posts %}
<h2>{{ post.title }}</h2>
<p>{{ post.timestamp }}</p>
<p>{{ post.body }}</p>
{% endfor %}
</body>
</html>
设置模板路径,打开mysite/settings.py文件,修改设置
创建视图函数
打开mysite/blog/views.py文件
from django.shortcuts import render
from blog.models import BlogPost
def archive(request):
posts=BlogPost.objects.all()
return render(request, 'archive.html', {'posts': posts})
posts=BlogPost.objects.all() :获取数据库里面所有的BlogPost对象
return render(request, 'archive.html', {'posts': posts}) :渲染模板,数据是一个字典型的对象(键值对)
创建blog的URL模式
在mysite/urls.py文件中添加blog的URL
from django.contrib import admin
from django.urls import path
from django.conf.urls import include,url
urlpatterns = [
url(r'^blog/',include('blog.urls')),
path('admin/', admin.site.urls),
]
在mysite/blog/目录下创建urls.py文件
from django.conf.urls import url
from . import views
urlpatterns=[
url(r'^archive$',views.archive),
]
再次启动服务python manage.py runserver,访问http://127.0.0.1:8000/blog/archive
页面如图所示
这样一个简单的博客就搭建完成了