以一个极简的博客网站为例,领略Diango。
本笔记提炼自慕课网教程
项目代码托管于我的Github
创建项目
步骤
在工作目录打开命令行,输入
1 | django-admin.py startproject project_name |
项目目录结构树
manage.py
./myblog
–_init_.py
–settings.py
–urls.py
–wsgi.py
介绍
文件 | 作用 |
---|---|
urls.py | 用于配置URL |
wsgi.py | WSGI(Python Web Server Gateway Interface) |
settings.py | settings.py 配置文件 |
init\.py python | 声明模块文件(为空) |
创建应用
步骤
在项目 manage.py 同级目录下打开命令行中,输入
1 | python manage.py startapp blog |
添加应用名到 settings.py 中的 INSTALLED_APPS 里
应用目录结构树
./migrations
–_init_.py
_init_.py
admin.py
apps.py
models.py
tests.py
views.py
介绍
文件 | 作用 |
---|---|
migrations: | 数据迁移模块(自动生成) |
admin.py: | 应用的后台管理系统配置 |
apps.py: | 应用的一些配置 |
models.py: | 数据模块,使用ORM |
test.py: | 自动测试模块 |
views.py: | 执行响应的代码所在模块,代码逻辑处理的主要地点 |
创建第一个页面(响应)
编辑blog.view
每一个响应对应一个函数,函数必须返回一个响应
函数必须接收一个参数,一般约定为request
每一个响应函数对应一个URL
1
2
3
4
5
6
7# view.py
from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
def index(request):
return HttpResponse('hello,goodwell')编辑urls.py配置URL
url函数放在urlpatterns列表中
包含三个参数: URL,对应方法,名称
关于页面聚合的改进:包含其他URL
在app目录下创建urls.py文件
1
2
3
4
5
6
7from django.urls import path
from . import views
urlpatterns = [
path('', views.index),
]在根urls.py 中引入 include,将第二个参数改为include(‘blog.urls’) //其为总路径
1
2
3
4
5
6
7
8from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('blog/', include('blog.urls')),
]
模板如下
views.py文件用于编写前后台的交互,以及需要的python算法:
一个标准的views.py文件可以按照下面的模板来写:
1 | from django.shortcuts import render |
url文件修改成如下代码:
1 | from django.conf.urls import patterns, include, url |
static文件
- 修改setting文件,建立static文件夹。
打开settings.py文件,在
1 | BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)) |
后面加上如下的代码,确定静态文件的位置。
1 | #Absolute path to the directory static files should be collected to. |
接下来在项目文件夹中建立一个static文件夹用于存放项目中的css,js以及其他文件。
- 加载静态文件
在html文件的
中添加如下代码用于加载静态文件:1 | {% load staticfiles %} |
在html文件中引入css文件和script文件的方法如下代码:1
2<link rel="stylesheet" type="text/css" href="{%static 'css/scatter.css'%}">
<script src = "{%static 'lib/d3.min.js' %}"></script>
Templates
HTML文件,使用了Django模板语言(Django Template Language, DTL),可以使用第三方模板
步骤
- 在app的根目录下创建 Templates 的目录
- 在该目录下创建HTML文件
- 在views.py中返回render() //渲染
DTL
render() 函数三个参数
- request
- ‘index.html’
- dict类型参数
该字典是后台传递到模板的参数,键为参数名
在模板中使用 来直接使用
注意事项
查找Templa按照INSTALLED_APPS 中添加的顺序查找
不同app下Templates 目录下的同名 .html文件会造成冲突
解决方法:在app的Templates 的目录创建app名的目录,将HTML放在其中
Models
通常,一个Models对应数据库的一张数据表,Django中Models以类的形式表现,包含一些基本字段和数据的一些行为。(ORM)
生成数据表步骤
在应用根目录下的models.py引入models模板,创建类,继承models.Model,该类即是一张数据表。
在类中创建字段
生成数据表:命令行进入manage.py 同级目录,执行
1
2
3python manage.py makemigrations app名(可选)
python manage.py migrate
字段创建
字段即类中的属性(变量),eg:
1 | # models.py |
数据库查看
自动在app/migrations/目录下生成移植文件,执行
1 | python manage.py sqlmigrate 应用名 文件id |
- 查看SQL语句,默认sqlite3 的数据库在项目根目录下db.sqlite3
- 查看并编辑db.sqlite3,使用第三方软件: SQLite Expert Personal (免费,轻量级)
页面呈现数据
后台步骤: views.py 中import models
1 | # views.py |
前端步骤: 模板可以直接使用对象以及对象的“.” 操作
1 | <h1>{{ article.title }}</h1> |
Admin
是Django自带的一个功能强大的自动化数据管理界面(后台),被授权的用户可以直接在Admin中管理数据库,提供了定制功能。
配置
创建用户(超级用户): 命令行输入
1
python manage.py createsuperuser
Admin入口: localhost:8000/admin/
修改settings.py 中LANGUAGE_CODE = ‘zh-Hans’
配置应用:
在应用下admin,py 中引入自身的models模块(或里面的模型类)
编辑admin.py: admin.site.register(models.Article)
1
2
3
4
5
6# admin.py
from django.contrib import admin
from .models import Article
admin.site.register(Article)修改数据默认显示名称
在Article类下添加一个方法,python3选择__str__(self) // 注意双下划线,然后return self.title
1
2
3
4
5
6
7
8
9
10# models.py
from django.db import models
class Article(models.Model):
title = models.CharField(max_length=32, default='Title')
content = models.TextField(null=True)
def __str__(self):
return self.title
补充内容
Template过滤器
1 | {{ value | filter }} |
Django Shell
自动引入项目环境,命令行输入
1 | python manage.py shell |
可以来进行调试,可以用于测试未知的方法
1 | from blog.models import Article |
Admin增强
创建admin配置类
1
2
3class ArticleAdmin(admin.ModelAdmin)
注册: admin.site.register(Article, ArticleAdmin)显示其他字段
1
list_display = ('title', 'content')
过滤器
1
list_filter = ('pub_time',)