九.django学习笔记一

最近在学习某马的django模块部分,为了方便复习,现将知识点总将如下。
首先我们先来了解下web框架

web框架

web框架的意义:

  • 免去搭建web应用程序
  • 免去不同web应用相同代码部分的重复编写,只需要关心web应用核心的业务逻辑实现

web应用程序的本质:

  • 接受并解析http请求,获取具体的请求信息
  • 处理本次http请求,即完成本次请求的业务逻辑处理
  • 构造并返回处理结果—http响应

下面主要从django流程,模型,视图,模板等方面进行学习

一. django流程

1.1django介绍

django-admin startproject name

python manager.py startapp name

2.2MVT模式
有一种程序设计模式叫MVC,其核心思想是分工、解耦,让不同的代码块之间降低耦合,增强代码的可扩展性和可移植性,实现向后兼容。

MVC模式说明
M全拼为Model,主要封装对数据库层的访问,对数据库中的数据进行增、删、改、查操作。
V全拼为View,用于封装结果,生成页面展示的html内容。
C全拼为Controller,用于接收请求,处理业务逻辑,与Model和View交互,返回结果。

Django的MVT
M全拼为Model,与MVC中的M功能相同,负责和数据库交互,进行数据处理。
V全拼为View,与MVC中的C功能相同,接收请求,进行业务处理,返回应答。
T全拼为Template,与MVC中的V功能相同,负责封装构造要返回的html。

1.2虚拟环境

这里主要讲的是在ubuntu怎么创建虚拟环境,在win上我们可以直接使用pycharm创建虚拟环境。创建虚拟环境主要是为了开发多个不同项目,需要使用同一个包的不同版本

#安装虚拟环境的命令 :
sudo pip install virtualenv
sudo pip install virtualenvwrapper
#安装完虚拟环境后,如果提示找不到mkvirtualenv命令,须配置环境变量:

# 1、创建目录用来存放虚拟环境
mkdir 
$HOME/.virtualenvs

# 2、打开~/.bashrc文件,并添加如下:
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh

# 3、运行
source ~/.bashrc


#创建虚拟环境的命令:
python2:
mkvirtualenv 虚拟环境名称
例 :
mkvirtualenv py_django

python3:
mkvirtualenv -p python3 虚拟环境名称
例 :
mkvirtualenv -p python3 py3_django

查看虚拟环境的命令:
workon

使用虚拟环境的命令:
workon 虚拟环境名称

例 :使用py3_django的虚拟环境
workon py3_django

退出虚拟环境的命令:
deactivate

删除虚拟环境的命令:
rmvirtualenv 虚拟环境名称

例 :删除虚拟环境py3_django

先退出:deactivate
再删除:rmvirtualenv py3_django

虚拟环境中安装包:
pip install 包名称

例 : 安装django-1.11.11的包
pip install django==1.11.11


查看虚拟环境中安装的包 :
pip list

1.3创建项目

工程目录说明:

  • settings.py是项目的整体配置文件。
  • urls.py是项目的URL配置文件。
  • wsgi.py是项目与WSGI兼容的Web服务器入口。
  • manage.py是项目管理文件,通过它管理项目。

运行开发的服务器:

python manage.py runserver ip:端口
或:
python manage.py runserver
#可以不写ip和端口:默认ip是127.0.0.1,默认端口是8000,django默认工作在调式Debug模式下,如果增加、修改、删除文件,服务器会自动重启。

子项目目录说明:

  • admin.py文件跟网站的后台管理站点配置相关。
  • apps.py文件用于配置当前子应用的相关信息。
  • migrations目录用于存放数据库迁移历史文件。
  • models.py文件用户保存数据库模型类。
  • tests.py文件用于开发测试用例,编写单元测试。
  • views.py文件用于编写Web应用视图。

创建完子应用后需要在项目目录里的settings.py里的INSTALLED_APPS里进行注册
如:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    #添加子应用的配置信息文件apps.py中的config类
    'book.apps.BookConfig'
   	# 或者直接写子应用的名字
   	#book
]

1.4模型

我们在MVT中已经介绍过M主要就是和数据库进行打交道的。由于Model中内嵌了ORM框架, 所以不需要直接面向数据库编程.而是定义模型类, 通过模型类和对象完成数据库表的增删改查.ORM框架就是把数据库表的行与相应的对象建立关联, 互相转换.使得数据库的操作面向对象.
使用Django进行数据库开发的步骤 :
定义模型类
模型迁移
操作数据库

1.4.1下面来看一个例子(这里先使用的是默认的sqllite3,之后会将默认数据库更改为mysql):
根据书籍表结构设计模型类:
模型类:BookInfo
书籍名称字段:name
根据人物表结构设计模型类:
模型类:PeopleInfo
人物姓名字段:name
人物性别字段:gender
外键约束:book
外键要指定所属的模型类book=models.ForeignKey(BookInfo)
说明 :
书籍-人物的关系为一对多. 一本书中可以有多个英雄.
不需要定义主键字段, 在生成表时会自动添加, 并且值为自增长.
根据数据库表中的设计,在models.py中定义模型类,继承自models.Model

from django.db import models

# Create your models here.
# 准备书籍列表信息的模型类
class BookInfo(models.Model):
    # 创建字段,字段类型...
    name = models.CharField(max_length=10)

# 准备人物列表信息的模型类
class PeopleInfo(models.Model):
    name = models.CharField(max_length=10)
    gender = models.BooleanField()
    # 外键约束:人物属于哪本书
    book = models.ForeignKey(BookInfo)

1.4.2模型迁移(建表)

生成迁移文件(根据模型类生成创建表的语句):python manage.py makemigrations
执行迁移(根据第一步生成的语句在数据库中创建表):python manage.py migrate

1.5站点管理

站点: 分为内容发布和公共访问两部分
内容发布的部分由网站的管理员负责查看、添加、修改、删除数据
Django能够根据定义的模型类自动地生成管理模块
使用Django的管理模块, 需要按照如下步骤操作 :

  • 管理界面本地化
  • 创建管理员
  • 注册模型类
  • 发布内容到数据库

1.5.1管理界面本地化
主要指的是时间和语言,在项目目录里的settings.py里进行更改

LANGUAGE_CODE = 'zh-Hans'

TIME_ZONE = 'Asia/Shanghai'

1.5.2创建管理员

 python manage.py createsuperuser
 #之后输入用户名,邮箱,密码即可
 #重置密码:
 python manager.py changepassword 用户名
 

之后可登录站点看到后台http://127.0.0.1:8000/admin

1.5.3注册模型类
在应用的admin.py文件注册模型类在应用的admin.py文件中注册模型类
需要导入模型模块 :from book.models import BookInfo,PeopleInfo
注册模型后 就可以在站点管理界面方便快速的管理数据.

1.5.4发布内容到数据库,并优化模型显示

# 准备书籍列表信息的模型类
class BookInfo(models.Model):
    # 创建字段,字段类型...
    name = models.CharField(max_length=10)

    def __str__(self):
        """将模型类以字符串的方式输出"""
        return self.name

1.6视图和url

站点管理页面做好了, 接下来就要做公共访问的页面了.对于Django的设计框架MVT.用户在URL中请求的是视图.视图接收请求后进行处理.并将处理的结果返回给请求者.
使用视图时需要进行两步操作

  • 定义视图
  • 配置URLconf

1.6.1定义视图
视图就是一个Python函数,被定义在应用的views.py中.视图的第一个参数是HttpRequest类型的对象reqeust,包含了所有请求信息.视图必须返回HttpResponse对象,包含返回给请求者的响应信息.
需要导入HttpResponse模块 :from django.http import HttpResponse
例如:

def index(request, age, name):
    # context = {'v1': age, 'v2': name}
    # print (context)

    return render(request, 'index.html')

那么如何人才能找到合适的视图呢?直接是一个配置URLconf的过程,先来了解下查找视图的过程:

  • 请求者在浏览器地址栏中输入URL, 请求到网站.
  • 网站获取URL信息.
  • 然后与编写好的URLconf逐条匹配.
  • 如果匹配成功则调用对应的视图.
  • 如果所有的URLconf都没有匹配成功.则返回404错误.
    首先你要了解的是项目文件settings.py里配置了url匹配的入口,一般为项目文件名下的urls
ROOT_URLCONF = 'bookshop.urls'

我们进入项目文件下的urls里进项查看:

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^', include('book.urls'))
]
#意味先匹配admin,就是我们的后台管理页面。ip地址端口号不进行匹配,r后面的是正则。如果不符合进行下一条匹配,即任意链接进入子项目下的urls再进行匹配,子项目下的urls需要自己创建,如下
from django.conf.urls import url
from book.views import booklist, index

urlpatterns = [
    url(r'^booklist/$', booklist, name='test'),
    url(r'^(?P<name>\d+)/(?P<age>\d+)/$', index)
]

其中匹配成功的网页文件,我们都是新建一个templates文件夹,如图:
如果不明白,下面我们好会讲到关于模板的内容

1.8模板

MVT设计模式中的T,Template
在Django中, 将前端的内容定义在模板中, 然后再把模板交给视图调用, 各种漂亮、炫酷的效果就出现了.
模板使用步骤:

  • 创建模板
  • 设置模板查找路径
  • 模板接收视图传入的数据
  • 模板处理数据

1.8.1.创建模板
在应用同级目录下创建模板文件夹templates. 文件夹名称固定写法.在templates文件夹下, 创建应用同名文件夹. 例, Book
在应用同名文件夹下创建网页模板文件. 例 :index.html
1.8.2设置模板查找路径
项目文件里的settings.py

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

其中Base_DIR指的是项目所在的路径地址,以此为基准查找html文件,所以视图函数的第二个参数你会写了吧

1.8.3模板接受视图传入的数据
1.8.4模板处理数据
1.8.5查看模板处理数据成果
即在视图模块里给render函数传入第三个参数,如下图,然后再html中使用模板函数对其进行格式化输出,效果如图

def index(request, age, name):
    context = {'v1': age, 'v2': name}
    print (context)

    return render(request, 'index.html', context)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
{{ v1 }}
年龄是{{v2}}
</body>
</html>

在这里插入图片描述
关于这块读者只要理解我们可以对模块进行操作,关于模块语言等内容后面会具体讲解,现在只需要知道大体的框架就行啦

1.9配置文件和静态文件

1.9.1DEBUG
调试模式,创建工程后初始值为True,即默认工作在调试模式下。
作用:修改代码文件,程序自动重启
Django程序出现异常时,向前端显示详细的错误追踪信息,例如
而非调试模式下,仅返回Server Error (500)
注意:部署线上运行的Django不要运行在调式模式下,记得修改DEBUG=False和ALLOW_HOSTS。
在这里插入图片描述
1.9.2静态文件
项目中的CSS、图片、js都是静态文件。一般会将静态文件放到一个单独的目录中,以方便管理。在html页面中调用时,也需要指定静态文件的路径,Django中提供了一种解析的方式配置静态文件路径。静态文件可以放在项目根目录下,也可以放在应用的目录下,由于有些静态文件在项目中是通用的,所以推荐放在项目的根目录下,方便管理。
在项目中根目录下创建static目录来保存静态文件
在settings中修改静态文件的两个参数

STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
]

此时在static添加的任何静态文件都可以使用网址/static/文件在static中的路径来访问了。
例如,我们向static目录中添加一张图片,在浏览器中就可以使用127.0.0.1:8000/static/1.png来访问。

1.9.3App应用配置
在每个应用目录中都包含了apps.py文件,用于保存该应用的相关信息。在创建应用时,Django会向apps.py文件中写入一个该应用的配置类,如

from django.apps import AppConfig
class BookConfig(AppConfig):
    name = 'book'

我们将此类添加到工程settings.py中的INSTALLED_APPS列表中,表明注册安装具备此配置属性的应用。
AppConfig.name属性表示这个配置类是加载到哪个应用的,每个配置类必须包含此属性,默认自动生成。
AppConfig.verbose_name属性用于设置该应用的直观可读的名字,此名字在Django提供的Admin管理站点中会显示,如

from django.apps import AppConfig

class UsersConfig(AppConfig):
    name = 'book'
    verbose_name = '图书管理'
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值