Web开发框架----Django

本文详细介绍了Web开发框架Django,包括预备知识如HTTP协议、请求方式及MVC/MTV模式。接着深入Django的快速入门,涵盖Django框架介绍、项目的创建与运行、数据库模型的创建、后台管理的启用,以及前台管理的URL路由、视图函数和模板管理。文章以图书管理系统为例,演示了Django应用的开发流程。
摘要由CSDN通过智能技术生成

文章目录

Web开发框架----Django

一、Django学习: 预备知识

1.HTTP协议的认识

(1)什么是HTTP 协议?

HTTP协议就是客户端和 服务器端之间数据传输的格式规范,格式简称为“超文本传输协议”。

  • 基于 TCP/IP
    HTTP是一个属于应用层的面向对象的协议。
    HTTP协议工作于客户端-服务端架构上。
  • 基于请求-响应模式
    浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。
    Web服务器根据接收到的请求后,向客户端发送响应信息。

当我们登陆时,默认http是不会保存登陆信息的,我们采用间接方法将用户名、密码等用session会话来保存,当我们判断用户名时从session中拿。(手动存储)
在这里插入图片描述

(2)为什么说Http 协议是无状态协议?

HTTP是一种不保存状态,即无状态(stateless)协议。HTTP协议自身不对请求和响应之间的通信状态进行保存。

(3)怎么解决Http 协议无状态协议?

有些场景我们必须要保存状态信息,比如用户登陆、购物车信息等
无状态协议解决办法:

  • 通过Cookie
  • 通过Session会话保存

Cookie流程
没有Cookie信息的状态下,户端向服务端发送一个保存请求,服务端收到请求生成一个Cookie,并添加到响应中返回给客户端。
当第二次存有Cookie信息状态的请求服务端时,服务端检查自己的Cookie,就知道这是刚才某个人给我发的。
在这里插入图片描述

2.Http请求中常见的请求方式

根据 HTTP 标准,HTTP 请求可以使用多种请求方法。

  • HTTP1.0 定义了三种请求方法: GET, POST 和 HEAD方法。
  • HTTP1.1 新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和CONNECT 方法(敲重点
    在这里插入图片描述

3.MVC模式和MTV模式

1.MVC 模式

MVC 就是把Web应用分为模型(M),控制器©和视图(V)三层,他们之间以一种插件式的、松耦合的方式连接在一起,模型负责业务对象与数据库的映射( ORM ),视图负责与用户的交互(页面),控制器接受用户的输入调用模型和视图完成用户的请求。
在这里插入图片描述
**控制器(C):**控制url地址,比如,用户访问一个url地址,控制器(C)就会告诉它要访问那个路由和视图函数。

MVC模式流程:
用户输入一个url,控制器(总管)判断访问的是什么比如访问主页,控制器去找主页的视图函数。
视图函数如果是要返回所有的数据信息,则告诉控制器,控制器去访问数据库模型里面,与数据库进行交流,存储或者取出数据等操作,把这个数据信息返回给view视图函数。
view视图函数将数据和html代码结合起来产生一个真正的html代码,返回给用户。

2.MTV 模式(python中基本都使用MTV)

MTV模式本质上和 MVC 是一样的,也是为了各组件间保持松耦合关系,只是定义上有些许不同,在Python的世界中,基本(除了Pylons)都使用了 MVC 的变种 MTV (Model Templates View 模型-模板-视图)。
Django 的MTV分别是值:
M 代表模型(Model): 负责业务对象和数据库的关系映射( ORM )。
T 代表模板 (Template):负责如何把页面展示给用户( html )。
V 代表视图(View): 负责业务逻辑,并在适当时候调用Model和Template。
除了以上三层之外,还需要一个URL分发器,它的作用是将一个个URL的页面请求分发给不同的View处理,View再调用相应的Model和Template,MTV的响应模式如下所示:
在这里插入图片描述
MTV模式流程
第一种:用户访问url,控制器判断是否存在此地址的路由和视图函数,如果有且不需要调用数据库的内容,视图函数view找到这个模板,返回给用户。

第二种:用户访问url,控制器判断是否存在此地址的路由和视图函数,如果有且需要调用数据库的内容,则去module里面访问数据库,拿到数据返回给view试图函数,在交给模板是西安一个动态的html,返回给用户。

二、Django学习: 快速入门

1.Django框架介绍

(1)什么是框架?

软件框架就是为实现或完成某种软件开发时,提供了一些基础的软件产品,
框架的功能类似于 基础设施 ,提供并实现最为 基础的软件架构和体系
通常情况下我们依据框架来实现更为复杂的业务程序开发
二个字,框架就是程序的 骨架

(2)Python 中常见的框架有哪些?

大包大揽 Django 被官方称之为完美主义者的Web框架。
力求精简 web.py 和 Tornado
新生代微框架 Flask 和 Bottle

(3)Django 框架介绍

Django 是一个高级的Python Web框架,它鼓励快速开发和清洁,务实的设计。
由经验丰富的开发人员构建,它负责Web开发的许多麻烦,因此您可以专注于编写应用程序,而
无需重新创建轮子。
免费的和开源的。
被官方称之为完美主义者的Web框架。
官方网址:https://www.djangoproject.com/

(4)Django 框架的特点

在这里插入图片描述

(5)Django 可以使用什么Python版本?

在这里插入图片描述
Django 的开发版本
在这里插入图片描述

(6)Django 的安装

pip install -i https://pypi.douban.com/simple django==2.2

2.Django快速入门:后台管理

以图书管理系统为例,是西安图书管理的基本功能。

主要代码:

#创建项目
django-admin startproject BookManage
#确认项目的创建
python manage.py runserver
#创建应用
python manage.py startapp bookApp
#编写视图函数
#修改路由即规则
#启动服务器
$ python manage.py runserver
#创建数据库
MariaDB [(none)]> create database BookManage charset=utf8;
#链接数据库设置setting
#创建数据库模型
# bookApp/models.py
#生成数据库表
	#激活setting
	#生成迁移文件
python manage.py makemigrations
	#执行迁移文件
python manage.py migrate
#

第一步:项目的创建(两种方式)与运行

第一次使用Django,必须进行一些初始设置,就是说,需要自动生成一些家里Django项目的代码。

(1)方法一:新建

和创建flask项目一样,在new中新建一个django项目就行

(2)方法二:命令行创建
  • 从命令行cd到你要存储代码的目录,运行一下命令:
django-admin startproject BookManage
  • cd进入项目目录,目录结构如图:
    在这里插入图片描述
  • 运行下面命令:
python manage.py runserver

出现以下页面,则说明创建成功:
在这里插入图片描述

(3)目录说明

manage.py :一个命令行工具,可以使你用多种方式对 Django 项目进行交互
**内层的目录:**项目的真正的Python包
__init__.py :一个空文件,它告诉Python这个目录应该被看做一个Python包
settings.py :项目的配置,#每一个配置前面都有一个url地址,不知道可以去查找
urls.py :项目的URL声明,路由和对应的视图函数
wsgi.py :项目与 WSGI 兼容的Web服务器入口。

用户访问百度时,百度有http服务,一般是NGINX、阿帕奇服务,用到的协议时http协议。在这里django项目用到的是WSGI协议,怎样使用户和jango项目结合呢?中间人就是WSGI,支持http协议与用户交流,也可以与jango项目交流。

第二步:应用的创建和使用

(1) 创建第一个应用程序

flask中我们需要自己创建蓝图(一个应用),绑定路由和视图函数,注册蓝图,比较麻烦。
Django 自带一个实用程序,可以自动生成应用程序的基本目录结构,因此您可以专注于编写代码而不是创建目录。

  • 在一个项目中可以创建一到多个应用,每个应用进行一种业务处理
  • 创建应用的命令:
python manage.py startapp bookApp
  • 应用的目录结构如下图:
    在这里插入图片描述
(2) 编写第一个视图函数

我们来写第一个视图。打开文件 bookApp/views.py 并放入以下Python代码:

from django.http import HttpResponse
from django.shortcuts import render

# Create your views here.

#在flask中视图函数不需要传参数,这里第一个参数必须是requsest,所有的请求在这里面
def index(request):
    return HttpResponse('<h1>图书馆里系统主页</h1>')

(3) 路由规则

要在 bookApp 目录中创建一个 URLconf ,创建一个名为 urls.py 。如下所示:

# bookApp/urls.py

from django.conf.urls import url
from . import views

# 编写路由规则
urlpatterns=[
# 当用户访问bookApp应用的主页时, 执行视图函数index,反向根据名称获取url地址; r'^$':以什么开头以什么结尾。
    url(r'^$',views.index,name='index')
]

此时项目找不到我们的url路由,
根据配置文件 BookManage/settings 可知路由查找的主文件是 BookManage/urls.py , 因此在 BookManage/urls.py 文件添加一条 url 规则来关联BookManage/urls.pybookApp/urls.py

# BookManage/urls.py 

from django.conf.urls import url 
from django.contrib import admin 
from django.urls import path, include 
urlpatterns = [ 
	path('admin/', admin.site.urls), 
	# 当用户访问的url地址以book开头, 请访问bookApp.urls这个url配置文件进行匹配并执行对应 的视图函数. 
	url(r'^book/', include('bookApp.urls')), 
]

include()函数允许引用其他 URLconfs 。
url() 函数介绍
Django url() 可以接收四个参数,分别是两个必选参数: regex 、 view 和两个可选参数:kwargs 、 name 。

  • regex : 正则表达式,与之匹配的 URL 会执行对应的第二个参数 view。
  • view : 用于执行与正则表达式匹配的 URL 请求。
  • kwargs : 视图使用的字典类型的参数。
  • name : 用来反向获取 URL。
(4) 效果展示
  • 启动服务器
$ python manage.py runserver

在这里插入图片描述

  • 访问 url 地址: http:// 127.0.0.1:8000/book/ 如果看到主页内容 图书管理系统 即成功。
    在这里插入图片描述
  • 整个流程:
    用户输入一个url,jango先去BookManage/urls.py 文件里面找,找到url(r'^book/',include('bookApp.urls')),发现是以book开头的,则去'bookApp.urls'里面找,找到url(r'^$',views.index,name='index'),意思如果要访问主页的话就去views.index里面,views里定义了一个试图函数indexreturn HttpResponse('<h1>图书馆里系统主页</h1>') 所以,返回给用户一个html页面。

第三步: 项目的数据库模型

(0). 数据库创建
MariaDB [(none)]> create database BookManage charset=utf8;

在这里插入图片描述

(1). 连接 MySQL 数据库配置
  • 在 settings.py 文件中,通过DATABASES项进行数据库设置
  • Django 支持的数据库包括: sqlite 、 mysql 等主流数据库
  • Django 默认使用 SQLite 数据库
  • Django数据库设置参考文档:https://docs.djangoproject.com/en/2.2/ref/settings/#databases
    其中ENGINE设置为数据库后端使用。内置数据库后端有:
  • ‘django.db.backends.postgresql’
  • ‘django.db.backends.mysql’
  • ‘django.db.backends.sqlite3’
  • ‘django.db.backends.oracle’
    BookManage/settings.py 文件中,通过DATABASES项进行数据库设置:

# .......

# Database
# https://docs.djangoproject.com/en/2.2/ref/settings/#databases

# 注释之前的sqlite数据库;
# DATABASES = {
   
#     'default': {
   
#         'ENGINE': 'django.db.backends.sqlite3',
#         'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
#     }
# }

# 添加新的Mysql数据库连接;
DATABASES = {
    
    'default': {
    
        'ENGINE': 'django.db.backends.mysql', 
        'NAME': 'BookManage', 
        'USER': 'root', 
        'PASSWORD': '123lh', 
        'HOST': 'localhost', 
        'PORT': '3306', 
    } 
}
# .......

注意: Django 使用 MySQL 数据库需要安装 PyMySQL ,若已经安装请略过。

$ pip install pymysql

注意: MySQLdb只支持Python2.*,还不支持3.可以用PyMySQL代替。
打开 BookManage/__init__.py ,写入以下代码导入 pymysql

import pymysql 
# MySQLdb只支持Python2.*,还不支持3.可以用PyMySQL代替。 
pymysql.install_as_MySQLdb()
(2). 创建数据库模型

本示例完成“图书-英雄”信息的维护,需要存储两种数据:图书、英雄

  • 图书表结构设计: 表名: Book
    图书名称: title
    图书发布时间: pub_date
  • 英雄表结构设计: 表名: Hero
    英雄姓名: name
    英雄性别: gender
    英雄简介: hcontent
    所属图书: hbook

图书-英雄的关系为一对多

# bookApp/models.py

from django.db import models

# Create your models here.

class Book(models.Model):
    # 定义属性:默认主键自增id字段可不写
    title = models.CharField(max_length=20)
    pub_date = models.DateTimeField()

    # 定义默认输出格式
    def __str__(self):
        return "%s" % self.title

    # 自定义对应的表名,默认表名:bookApp_book
    class Meta:
        db_table = "books"

class Hero(models.Model):
    name = models.CharField(max_length=20)
    gender = models.BooleanField()
    content = models.CharField(max_length=100)
    #外键:一对多时,外键卸载多的一端。
    # on_delete:级联删除;为True时,当删掉人物时,人物所在的书本也删掉。在python2以上的版本,必须设置此参数,否则报错。
    Book = models.ForeignKey('Book', on_delete=False)

    def __str__(self):
        return "%s" % self.name

        # 自定义对应的表名,默认表名:bookApp_hero
    class Meta:
        db_table = "heros"
(3). 生成数据库表
  • 激活模型:编辑 settings.py 文件,将应用加入到 INSTALLED_APPS
# Application definition
#jango已经写好的应用
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    #添加引用,要用的时候加进来,不用就可以注释掉
    'bookApp',
]

  • 生成迁移文件:根据模型类生成 sql 语句
python manage.py makemigrations

在这里插入图片描述
产生的迁移文件如下:
在这里插入图片描述
注意报错:
(1)使用命令:python manage.py makemigrations,会报错mysqlclient版本不够,一个暴力的解决措施:去base.py文件中将这句注释掉。
在这里插入图片描述
(2)在运行,会报错编码方式,修改:
在这里插入图片描述

此时还没有生成数据库表

  • 执行迁移:执行 sql 语句生成数据表
python manage.py migrate

在这里插入图片描述
数据库中查看数据库表是否创建成功?
在这里插入图片描述

(4). 数据库模型基本操作

进入python交互模式,在操作过程中如果遇到错误修改了代码,需要退出重新进入python交互模式。
引入需要的包

#现在进入交互式的Python shell,并使用 Django 提供的免费 API
F:\ziliao\python_kaifa\my_code\09_\BookManage>python manage.py shell
Python 3.7.3 (default, Mar 27 2019, 17:13:21) [MSC v.1915 64 bit (AMD64)]
Type 'copyright', 'credits' or 'license' for more information
IPython 7.4
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值