Python学习笔记(八)–Django框架

1.什么是框架?

框架就是程序的骨架,主体结构,也是个半成品。

2.框架的优缺点

可重用、成熟,稳健、易扩展、易维护。

3.Python中常见的框架

(1)大包大揽Django被官方称之为完美主义者的web框架。它鼓励快速开发和清洁,务实的设计。它是免费和开源的。Django 2.0 可谓是 Django 的里程碑版本,它于 2017 年 12 月正式发布。它移除了对 Python 的支持,最少需要 3.4 以上版本.

(2)力求精简web.py 和 Tornado。

(3) 新生代微框架Flask 和 Bottle。

4.MVT

MVC和MVT(T是模板的英文缩写)

jango 的 MTV 模式本质上和 MVC 是一样的,也是为了各组件间保持松耦合关系,只是定义上有些许不同,Django 的 MTV 分别是指:

  • M 表示模型(Model):编写程序应有的功能,负责业务对象与数据库的映射(ORM)。
  • T 表示模板 (Template):负责如何把页面(html)展示给用户。
  • V 表示视图(View):负责业务逻辑,并在适当时候调用 Model和 Template。

除了以上三层之外,还需要一个 URL 分发器,它的作用是将一个个 URL 的页面请求分发给不同的 View 处理,View 再调用相应的 Model 和 Template,MTV 的响应模式如下所示:

简易图:

Python学习笔记(八)--Django框架

用户操作流程图:

Python学习笔记(八)--Django框架

解析:

用户通过浏览器向我们的服务器发起一个请求(request),这个请求会去访问视图函数:

  • a.如果不涉及到数据调用,那么这个时候视图函数直接返回一个模板也就是一个网页给用户。
  • b.如果涉及到数据调用,那么视图函数调用模型,模型去数据库查找数据,然后逐级返回。

视图函数把返回的数据填充到模板中空格中,最后返回网页给用户。

5.Djiago框架特点

(1)快速开发:Django的宗旨在于帮助开发人员快速从概念到完成应用程序;

(2)安全可靠:Django认值对待安全性,帮助开发人员避免许多常见的安全错误;

(3)超可伸缩性:web上的一些最繁忙的网站利用了Django快速灵活扩展的能力。

6.Django安装

(1)建议使用使用pip命令安装

pip install django

可以通过==XXX指定版本

(2)检测当前是否安装Django及版本

python -m django –version

(3)检查是否安装成功

pip3 freeze | grep -i ‘Django’

(4)如果离线安装

step 1 官网下载离线安装包;

step 2 将安装包复制到虚拟机;

step 3 解压缩 tar -xvf Django-2.2.12.tar.gz

step 4 进入目录 cd Django-2.2.12

step 5 执行安装 python3 setup.py install

step 6检查是否安装成功

7.初始化项目

django-admin startproject 项目名称

会产生一个以项目名称命名的目录(或称为项目容器,可以有其他应用),主要结构如下:

项目名称/
    manage.py
    项目名称/
        __init__.py
        settings.py
        urls.py
        wsgi.py

<span class="pre">manage.py</span>: 管理 Django 项目的命令行工具,一个命令行使用程序,可以让用户以各种方式与此Django项目进行交互。

里面一层的 项目名称 / 目录包含你的项目,它是一个纯 Python 包。它的名字就是当你引用它内部任何东西时需要用到的 Python 包名。 (比如 mysite.urls).

<span class="pre">&#x9879;&#x76EE;&#x540D;&#x79F0;/__init__.py</span>:一个空文件,告诉 Python 这个目录应该被认为是一个 Python 包。

<span class="pre">&#x9879;&#x76EE;&#x540D;&#x79F0;/settings.py</span>:Django 项目的配置文件。

<span class="pre">&#x9879;&#x76EE;&#x540D;&#x79F0;/urls.py</span>:Django 项目的 URL 声明,就像你网站的”目录”。

<span class="pre">&#x9879;&#x76EE;&#x540D;&#x79F0;/wsgi.py</span>:作为你的项目的运行在 WSGI 兼容的Web服务器上的入口。

8.运行开发服务器

python manage.py runserver

启动默认的端口为8000,本地地址127.0.0.1(localhost),默认只能本地访问网站,不支持远程访问.

如果需要其他人也可以访问,需要指定0.0.0.0这个ip。就要加入参数:–host 0.0.0.0。

例如:指定其它端口和IP。

python manage.py runserver --host 0.0.0.0 --port 9008

-h HOST, –host HOST

-p PORT, –port PORT

上面的命令可能执行报错,错误信息如下:

CommandError: "0.0.0.0" is not a valid port number or address:port pair.

所以,将命令调整如下:

python manage.py runserver 0.0.0.0:9008

Django已安装,但是如果遇到还是遇到如下错误,那可能是版本不对,或者python的软连接由问题

错误信息

Traceback (most recent call last):
  File "manage.py", line 8, in
    from django.core.management import execute_from_command_line
ImportError: No module named django.core.management

解决方案:安装python3,并且更新下软连接

ln -s /usr/bin/python3.6 /usr/bin/python

9.应用的创建

Django自带一个应用程序,可以自动生成应用程序的基本目录结构。

创建应用的命令(记住:一定要在项目的当前目录下去常见应用;一个项目可以包含多个应用):

python manage.py startapp 应用名

此时新建了一个以 应用名 命名的应用文件,它的里面也创建了一些py文件和包

admin.py:管理站点模型的声明文件,默认为空。

apps.py :应用信息定义文件。在其中生成了类Appconfig,类用于定义应用名等Meta数据。

migrations: 用于在之后定义引用迁移功能。

models.py: 添加模型层数据类的文件。

test.py :测试代码文件。

views.py :定义URL响应函数。

10.path() 函数

主要进行路由的匹配。

path(route,view,kwargs,name)

参数 route

route 是包含URL模式的字符串。当 Django 响应一个请求时,它会从 urlpatterns 的第一项开始,按顺序依次匹配列表中的项,直到找到匹配的项,然后执行该项映射的视图函数或者 include 函数分发的下级路由。

参数 view

view 指的是处理当前 url 请求的视图函数。当 Django 匹配到某个路由条目时,自动将封装的 HttpRequest 对象作为第一个参数,被”捕获”的参数以关键字参数的形式,传递给该条目指定的视图函数。

参数 kwargs

kwargs 指使用字典关键字传参的形式给关联的目标视图函数传递参数。

参数 name

name 给 URL 起个别名,常用于 url 的反向解析,避免在模板中适应硬编码的方式使用嵌入 url。

11.mysqlclient

Django使用MySQL数据库需要加载MySQLdb模块,需要安装mysqlclient.(Django2.2 版本之前安装的是pymysql模块,新版本使用的是mysqlclient)

12.HttpResponse对象

视图在接收请求并处理后,必须返回HttpResponse对象或子对象。HttpRequest对象由Django创建,HttpResponse对象由开发人员创建。

from django.http import HttpResponse

视图在接收请求并处理后,必须返回HttpResponse对象或子对象。HttpRequest对象由Django创建,HttpResponse对象由开发人员创建。

响应对象主要有三种形式:HttpResponse()、render()、redirect()。

HttpResponse(): 返回文本,参数为字符串,字符串中写文本内容。如果参数为字符串里含有 html 标签,也可以渲染。

render(): 返回文本,第一个参数为 request,第二个参数为字符串(页面名称),第三个参数为字典(可选参数,向页面传递的参数:键为页面参数名,值为views参数名)。

redirect():重定向,跳转新页面。参数为字符串,字符串中填写页面路径。一般用于 form 表单提交后,跳转到新页面。

render 和 redirect 是在 HttpResponse 的基础上进行了封装:

  • render:底层返回的也是 HttpResponse 对象
  • redirect:底层继承的是 HttpResponse 对象

13.Django处理一个请求的过程(步骤)

(1)首先Django确定要使用的根URLconf模块,通过ROOT_URLCONF来设置,具体在settings.py配置文件中。但是如果传入HttpRequest对象具有urlconf属性(由中间件设置),则其值将用于替换ROOT_URLCONF设置。

(2)Django加载该Python模块并查找该变量urlpatterns.它是django.urls.path() 和(或)django.urls.re_path()实例的序列(sequence).

(3) Django按顺序运行每个URL模式,并在匹配所请求的URL的第一个URL中停止。

(4)一旦正则表达式匹配,Django将导入并调用给定的视图,这是一个简单的Python函数(或基于类的视图)。该视图会获得如下参数:

*** 一个HttpRequest实例;

*** 如果匹配的正则表达式没有返回任何命名组,那么来自正则表达式的匹配将做为位置参数提供。

*** 关键字参数由正则表达式匹配的任何命名组组成,由可选kwargs参数中指定的任何参数覆盖。django.urls.path()、django.urls.re_path()。

(5)如果没有正则表达式匹配,或者在此过程中的任何一点出现异常,Django将调用适当的错误处理视图。

14. URL的命名组

(1)在URL配置中要传递参数,一般使用正则表达式非命名组(通过括号)捕获URL定位,并将它们作为位置参数传递给视图。

(2)在更高级的使用中,可以使用正则表达式命名组来捕获URL定位,并将它们作为关键字参数传递给视图。

(3)在Python正则表达式中,正则表达式命名组的语法是(?P

15.URL的反向解析

如果在视图、模板中使用硬编码的链接,在urlcong发生改变时,维护是一件非常麻烦的事情。

*** 解决:在做链接时,通过指向urlconf的名称,动态生成链接地址;

*** 视图:使用django.core.urlresolvers.reverse()函数;

*** 模板:使用url模板标签。

16.Django的Model模型介绍

模型是项目中的数据信息源,它包含着储存数据的必要字段和行为。通常,每个模型对应数据库中的一张表,每个属性对应一个字段。每个模型都是django.db.models.Model的一个Python子类。Django提供一套自动生成的用于数据库访问的API;模型与数据库的关系是ORM关系(对象–关系–映射)。使用模型的好处:Model是MVC框架中重要的一部分,负责在数据库中存取数据,它实现了数据模型与数据库的解耦,即不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库。

17.Model的开发流程

(1)在应用的models.py中定义模型类,要求继承自models.Model。

(2)把应用加入到项目settings.py配置文件的INSTALLED_APPS项中。

(3)生成迁移文件

python manage.py makemigrations

(4) 执行迁移

python manage.py migrate

注意:需要注意的是这两个命令默认情况下是作用于全局,也就是对所有最新更改的models或者migrations下面的迁移文件进行对应的操作,如果要想仅仅对部分app进行作用的话 则执行如下命令:

python manage.py makemigrations appname

python manage.py migrate appname

如果要想精确到某一个迁移文件则可以使用:

python manage.py migrate appname 文件名

(5)使用模型类进行CRUD操作。

18.Model模型的实例

*** 模型实例对象是通过objects属性获取,即Django为模型类提供的管理器。

objects:是Manager类型的对象,用于与数据库进行交互。

***实例的方法:str(self):重写object方法,此方法在将对象转换成字符串时会被调用;save():将模型对象保存到数据表中;delete():将模型对象从数据表中删除。

19.视图

Django框架中的视图(View)是用来负责处理用户请求和返回响应的逻辑程序。视图(View)简而言之就是一个Python的函数或方法,接受处理web请求。视图的响应可以是一个 HTML 页面、一个 404 错误页面、重定向页面、XML 文档、或者一张图片…。无论视图本身包含什么逻辑,都要返回响应。代码写在哪里都可以,只要在 Python 目录下面,一般放在项目的 views.py 文件中。每个视图函数都负责返回一个 HttpResponse 对象,对象中包含生成的响应。视图层中有两个重要的对象:请求对象(request)与响应对象(HttpResponse)。

视图的代码按惯例是放置一个名为’views.py’的文件中,此文件放在项目或应用程序目录中。

20.HttpRequest对象的属性和方法

属性:下面除非特别说明,属性都是只读的

path:一个字符串,表示请求的页面的完整路径,不包含域名;

method:一个字符串,表示请求使用的HTTP方法,常用值包含:’GET’、’POST’;

encoding:一个字符串,表示提交的数据的编码方式,一般为utf-8;

GET:一个类似于字典的对象,包含get请求方式的所有参数;

POST:一个类似于字典的对象,包含post请求方式的所有参数;

FILES:一个类似于字典的对象,包含所有的上传文件;

COOKIES:一个标准的Python字典,包含所有的cookie,键和值都为字符串;

session:一个既可以读又可以写的类似于字典对象,表示当前会话,需Django启用会话才可用。

方法:

is_ajax():如果请求是通过XMLHttpRequest发起的, 则返回true。

21.QueryDict对象

request对象的属性GET、POST都是QueryDict类型的对象。与Python字典不同,QueryDict类型的对象用来处理同一个键带有多个值的情况。

方法get():根据键获取值,只能获取键的一个值,如果一个键同时拥有多个值,获取最后一个值。

方法getlist():根据键获取值,将键的值以列表返回,可以获取一个键的多个值,dict.getlist(”键,default)。

参考网址

1.djangoproject介绍

https://docs.djangoproject.com/en/4.0/

2.好评如潮Python Django全套教程

https://www.bilibili.com/video/BV1pq4y1W7a1?p=8

3.Django简介

https://www.runoob.com/django/django-intro.html

Original: https://www.cnblogs.com/xuliuzai/p/15820118.html
Author: 东山絮柳仔
Title: Python学习笔记(八)–Django框架

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/621322/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 什么是前缀索引?

    一、什么是前缀索引? 所谓前缀索引,说白了就是对文本的前几个字符建立索引( 具体是几个字符在建立索引时去指定),比如以产品名称的前 10 位来建索引,这样建立起来的索引更小,查询效…

    数据库 2023年6月14日
    0135
  • neo4j数据库数据转移,从阿里云转移到windows服务器

    neo4j数据库数据从阿里云转移到windows 1.从阿里云迁移neo4j时需停掉neo4j数据库,在neo4j的bin目录下输入 ./neo4j stop 2.将数据备份到一个…

    数据库 2023年6月6日
    093
  • 一文读懂Redis

    Redis与NoSQL概述 Nosql的优势 使用nosql解决cpu与内存压力 使用nosql解决I/O压力 Nosql数据库的概述 NoSql= Not Only SQL 采用…

    数据库 2023年6月6日
    0143
  • 基于Spring实现策略模式

    背景: 看过很多策略模式,总结下来实现原理大体都差不多,在这里主要是讲解下自己基于Spring更优雅的实现方案;这个方案主要是看了一些开源rpc和Spring相关源码后的一些思路,…

    数据库 2023年6月6日
    0131
  • MySQL实战45讲 18

    18 | 为什么这些SQL语句逻辑相同,性能却差异巨大? 在 MySQL 中,有很多看上去逻辑相同,但性能却差异巨大的 SQL 语句。对这些语句使用不当的话,就会不经意间导致整个数…

    数据库 2023年6月14日
    0116
  • [LeetCode]7. 整数反转

    给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。 示例 1: 输入: 123输出: 321示例 2: 输入: -123输出: -321示例 3: 输入: 1…

    数据库 2023年6月9日
    094
  • 数据库_多表查询_内连接&外连接

    首先明确一下定义: 内连接:在多表查询的时候,只检索出表之间相互匹配的行(满足匹配条件的行),结果中不包括两个表之间不匹配的行。 一个不太准确但易懂的例子:比如有两个表,表1存储了…

    数据库 2023年5月24日
    0181
  • 视频语义分割基准数据集与评估方法

    概述 本文来源于《A Benchmark Dataset and Evaluation Methodology for Video Object Segmentation》,论文主…

    数据库 2023年6月11日
    098
  • Mybatis完整版详解

    一、简介 1.什么是MyBatis MyBatis 是一款优秀的持久层框架 它支持自定义 SQL、存储过程以及高级映射。 MyBatis 免除了几乎所有的 JDBC 代码以及设置参…

    数据库 2023年6月16日
    0126
  • MySQL 分区表,为什么分区键必须是主键的一部分?

    随着业务的不断发展,数据库中的数据量会越来越大,相应地,单表中的数据量也会越来越大,达到临界值时,单表的查询性能会下降。 [En] With the continuous deve…

    数据库 2023年5月24日
    0114
  • MAC MySQL安装配置

    1. 下载 注意选择对应的版本,M系列芯片对应ARM 2. 安装 一直点击继续即可, 注意要记住root用户端密码 3. 配置 在 ~/.bash_profile 增加 4. 服务…

    数据库 2023年6月14日
    0125
  • 域名SSL认

    阿里云:域名SSL认证-视频 Hole yor life get everything if you never give up. Original: https://www.cn…

    数据库 2023年6月9日
    0146
  • 详细记录一次stampstime字段引起pxc集群脑裂

    事故回顾 运维执行导入sql,导入后收到master2和master3节点宕机的报警;检查集群状态发现master1进入初始化模式,无法读写;master2和master3已经下线…

    数据库 2023年5月24日
    0101
  • 并发模型与IO模型梳理

    并发模型 常见的并发模型一般包括3类,基于线程与锁的内存共享模型,actor模型和CSP模型,其中尤以线程与锁的共享内存模型最为常见。由于go语言的兴起,CSP模型也越来越受关注。…

    数据库 2023年6月9日
    0123
  • Linux系统安装JDK

    准备工作 1.去JDK的官网下载一个1.8的安装包 2.解压到linux系统 tar -zxvf jdk-8u311-linux-x64.tar.gz -C /download/c…

    数据库 2023年6月6日
    0109
  • 深入浅出分析 PriorityQueue

    作者:炸鸡可乐原文出处:www.pzblog.cn 一、摘要 在前几篇文章中,咱们了解到,Queue 的实现类有 ArrayDeque、LinkedList、PriorityQue…

    数据库 2023年6月14日
    0125
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球