django教程之入门

前言

MVC

  • 大部分的开发语言中都有MVC框架
  • MVC框架的核心思想是:解耦
  • 降低各种功能模块之间的耦合性,方便变更,更容易重构代码,最大程度上实现代码的重用
  • m表示model,主要用于对数据库层的封装
  • v表示view,用于向用户展示结果
  • c表示controller,是核心,用于处理请求、获取数据、返回结果

MVT

  • Django是一款python的web开发框架
  • 与MVC有所不同,属于MVT框架
  • m表示model,负责与数据库交互
  • v表view,是核心,负责接收请求、获取数据、返回结果
  • t表示template,负责呈现内容到浏览器

    开发过程

入门

搭建开发环境

  1. 安装Django
1
pip install django

检测安装是否成功

1
2
3
python 
import django
django.VERSION
  1. 在虚拟环境中创建Django项目

打开pycharm专业版,创建项目test1虚拟环境,进入test1目录,目录结构如下
在这里插入图片描述

  • manage.py: 一个命令行工具,可以使你用多种方式对DJang项目进行交互
  • 内层的目录: 项目真正的Python包
  • __init__.py: 一个空文件,它告诉python这个目录应该被看做一个Python包
  • settings.py: 项目的配置
  • urls.py: 项目的URL声明
  • wsgi.py: 项目与WSGI兼容的Web服务器入口

命令行安装的方法

设计模型

设计介绍
数据库配置

  • 在setting.py文件中,通过DATABASES项进行数据库设置
  • django支持的数据库包括:sqlite,mysql,等主流数据库
  • Django默认使用SQLite数据库

创建应用

  • 在一个项目中可以创建一到多个应用,每个应用进行一种业务处理
  • 创建应用的命令:
1
python manage.py startapp booktest
  • 应用的目录结构如下图
    在这里插入图片描述

定义模型类

  • 有一个数据表,就有一个模型类与之对应
  • 打开models.py文件,定义模型类
  • 引入包 from django.db import models
  • 模型类继承自models.Model类
  • 说明:不需要定义主键列,在生成是自动添加,并且值为自动增长
  • 当输出对象时,会调用对象的str方法

开发过程

生成数据表

  • 激活模型:编辑setting.py文件,将booktest应用加入到install_apps中
  • 生成迁移文件:根据模型类生成sql语句
1
python manage.py makemigrations
  • 将迁移文件被生成到应用的migrations目录
  • 执行迁移:执行sql语句生成数据表
1
python manage.py migrate

服务器

  • 运行命令
1
python manage..py runserver

管理站点

管理操作

  • 站点分为“内容发布”和“公共访问”两部分
  • “内容发布”的部分负责添加、修改、删除内容,开发这些重复的功能是一件单调乏味、缺乏创造力的工作、为此,Django会根据定义的模型类完全自动生成管理模块

使用django的管理

  • 创建一个管理员用户
1
python manage.py createsuperuser, 按提示输入用户名、邮箱、密码
  • 启动服务器,进入管理站点,默认可以对groups、users进行管理

管理界面本地化

  • 编辑setting.py文件,设置编码、时区
1
2
LANGUAGE_CODE = 'zh-Hans'
TIME-ZONE = 'Asia/Shanghai'

向admin注册booktest的模型

  • 打开booktest/admin.py文件,注册模型
1
2
3
from django.contrib import admin
from model import BookInfo
admin.site.register(BookInfo)
  • 刷新管理界面,可以对BookInfo的数据进行增删改查操作
  • 问题:如果str方法中返回中文,在修改和添加时会报ascii的错误
  • 解决:在str()方法中,将字符串末尾添加“.encode(“utf-8”)”

自定义管理页面

  • Django提供了admin.ModelAdmin类
  • 通过定义ModelAdmin的子类,来定义模型在Admin界面的显示方式
1
2
3
class QuestionAdmin(admin.ModelAdmin):
...
admin.site.register(Question,QuestionAdmin)

列表页属性

  • list_display: 显示字段,可以点击列头进行排序
1
list_display = ['pk','btitle','bpub_data']
  • list_filter: 过滤字段,过滤款会出现在右侧
1
list_filter = ['btittle']
  • search_fields: 搜索字段,搜索框会出现在上侧
1
search_fields = ['btitle']
  • list_per_page: 分页,分页框会出现在下侧
1
list_per_page = 10

添加、修改页属性

  • fields: 属性的先后顺序
1
fields = ['bpub_date', 'btitle']
  • fieldsets: 属性分组
1
2
3
4
fieldsets = [
('basic',{'fields':['btitle']}),
('more',{'fields':['bpub_date']}),
]

关联对象

  • 对于HeroInfo模型类,有两种注册方式
    方式一:与BookInfo模型类相同
    方式二:关联注册

视图

  • 在django中,视图对web请求进行回应
  • 视图接受request对象作为第一个参数,包含了请求的信息
  • 视图就是一个python函数,被定义在view.py中
  • 定义完视图后,需要配置urlconf,否则无法处理请求

URLconf

  • 在django中,定义URLconf包括正则表达式、视图两部分
  • Django使用正则表达式匹配请求的URL,一旦匹配成功,则调用应用的视图
  • 注意:只匹配路径部分,即除去域名、参数后的字符串
  • 在test/urls.py插入booktest,使主urlconf连接到booktest.urls模块
1
url(r'^',include('booktest.urls')),
  • 在booktest中的urls.py中添加urlconf
1
2
3
4
5
6
from django.conf.urls import url 
from .import views
urlpatterns = [
url(r'^$',views.index),
url(r'^([0-9+])/$',views.detail),
]

模板

  • 模板是HTML页面,可以根据视图中传递的数据填充值
  • 创建模板的目录下图
    在这里插入图片描述
  • 修改setting.py文件,设置TEMPLATES的DIRS值
1
'DIRS': [os.path.join(BASE_DIR,'templates')],
  • 在模板中访问视图传递的数据
1
2
{{输出值,可以是变量,也可以是对象,属性}}
{ % 执行代码 % }

-------------本文结束啦感谢您的阅读-------------
0%