1.前言

该专栏学习笔记环境参数如下:

  • Windows 10
  • Xampp/Navicat for MySQL
  • Python 3.8+
  • Django 3.0.*
  • Vue 2.6+

开发工具:

  • PyCharm 专业版
  • VS Code

补充说明:

本人电脑存在多个版本的python,那么当你电脑存在多个版本python,如何使用?如何指定pip安装到指定版本?通过py 选择版本,然后进行相关命令操作。详见:https://blog.csdn.net/stone_tigerLI/article/details/121496828,自行百度不赘诉

2.初识Django框架

2.1.Django介绍

Django分层设计也是通过MTV,区别于Flask,这些相关内容Django都有,不需要依赖扩展。安装Django时,自己要在网上查找一下你安装的Django版本和你的Python版本兼容不兼容!

2.2.开发基础知识

2.2.1.Django的安装

  • 方式一:pip安装【推荐】 pip install django

  • 方式二:前往官网pypi.org下载源码安装,cd到setup.py目录下,执行 python setup.py install

  • 检测是否安装成功

    import django
    django.__version__

2.2.2.Django项目的创建

  • 方式一:使用命令行生成模板 django-admin[.py] startproject my_project ,这个命令的django-admin是什么?在我们pip安装好django后,在图示目录生成exe。命令参数含义:【.py】是可选的;startproject创建;my_project创建的项目名称。

2.2.3.Django项目的文件目录结构

templates:模板目录

test_django:项目目录

  • __init__.py:包的入口文件
  • asgi.py:部署配置
  • settings.py:项目配置文件
  • urls.py:url访问地址配置文件
  • wsgi.py:部署配置

manage.py:命令行管理工具

2.2.4.Django项目开发服务器的启动

启动服务器方式一: python manage.py runserver

启动服务器方式二:

思考:我想指定启动的端口怎么办?

2.3.开发流程讲解

2.3.1.开发服务器的启动配置

知识点1:选择项目解释器,通过cmd执行django-admin创建的项目需要进行选择。pycharm方式创建的项目不需要选择,因为在创建项目的时候已经选择过了解释器

知识点2:启动开发服务器 python manage.py runserver ,runserver常用参数

  • 指定端口:

    • 命令行启动 python manage.py runserver 9527
    • pycharm启动

  • 指定IP及端口:

    • 命令行启动python manage.py runserver 0.0.0.0:9527
    • pycharm启动

指定IP启动后,根据页面提示信息,我们需要在setting.py配置ALLOWED_HOSTS,由于安全的需要,需要指定哪些主机是可以访问的;添加好之后,再次访问就OK了

2.3.2.项目模块的创建

创建示例hello模块: python manage.py startapp hello ,模块的含义以及生成的内容会在后面笔记中写,该篇随笔只是认识Django框架

2.3.3.完成第一个页面

第一步:在views.py文件中写个函数

第二步:在urls.py配置规则

3.从请求到响应

3.1.从请求到响应

知识点:

  • 了解URL的设计及配置
  • 掌握视图的定义及作用
  • 掌握URL和视图的关系
  • 了解视图响应的内容

什么是视图?

一个视图函数,简称为视图,是一个简单的Python函数。函数定义的位置是在模块的views.py文件中,传入request参数,request这个参数是固定的必须得有,当然你也可以叫其他名字。

视图函数的作用:就是接受一个请求,返回一个响应;

URL的设计:设计简单优雅的URL:使用正则表达式、指定参数类型

URL的常用配置:函数 path(route,view,name,**kwargs) \函数 include(urls,namespace) ;path函数就是之前上述例子urls.py文件中使用的,include函数就是我们在使用模块化开发的时候进行使用,希望把某一个模块下的url单独进行管理,然后再把所有模块的url整合到一起,这个时候就需要用到include函数。

通过django项目的配置文件settings.py我们看到,根url是图示的urls文件

include示例:按模块管理url,首先在hello模块下新建一个urls文件

URL与视图的关系:

  • URL的正向解析
  • URL的逆向解析,防止我们硬编吗,类似flask中的url_for

视图响应的内容:

  • 可以是文本
  • HTML内容
  • 图像
  • 甚至是404、重定向等

小结:视图是一个Python函数,用来处理http请求。通过path和include函数配置url,将url和视图函数关系建立起来。

3.2.在视图中处理业务逻辑

3.2.1.响应HTML内容

3.2.2.获取URL参数

  • 获取URL中指定类型的参数
  • 获取URL中正则匹配的参数

3.2.3.获取GET参数

3.3.从文件响应HTML内容

知识点:

  • 回顾 响应HTML内容的原理
  • 了解 render_to_string()函数
  • 掌握 render()函数

3.3.1.响应HTML内容的原理

其实和FLASK差不多

  • 第一步,从磁盘读取HTML文件
  • 第二步,替换HTML中的特殊字符
  • 第三步,发送给浏览器

3.3.2.render_to_string()函数

render_to_string(template_name,context=None,request=None,using=None)

  • template_name:模板名称,必传
  • request:请求对象
  • context:模板上下文对象(dict)
  • using:模板引擎名称(如:Jinja2)

补充说明:配置文件settings.py文件的TEMPLATES属性说明

  • BACKEND:模板引擎,现在默认是使用django自带的模板引擎
  • DIRS:模板目录,去哪里找html文件
  • APP_DIRS:为True时,代表可以在模块下面去找html文件
  • OPTIONS:配置选项

补充说明:Django框架寻找模板的顺序,程序会先去根目录的templates下寻找对应的html文件,若根目录下的templates下没有对应的html文件,程序会去模块下的templates寻找对应的html。若根目录和模块目录的templates都有这个html文件,会执行根目录下的html文件。这个执行顺序是无法修改的!

想让程序去模块目录里面找html文件怎么配置呢?

3.3.3.render()函数

render(request,template_name,context=None,content_type=None,status=None,using=None) ,实际工作当中render()的使用频率要高于render_to_string(),因为它使用起来更简单。

  • request:请求对象,必传
  • template_name:模板名称,必传
  • context:模板上下文对象(dict)
  • context_type:MIME类型,默认为text/html
  • status:HTTP状态码
  • using:模板引擎名称(如:Jinja2)

3.4.请求响应对象

知识点:

  • 掌握 请求到响应的流程
  • 理解 请求对象
  • 理解 响应对象

3.4.1.请求与响应

3.4.2.请求对象HttpRequest

请求对象HttpRequest其实是Django框架中写好的一个类,它把我们每一次发过来的请求封装成一个对象。视图中使用的使用,方法传递进去的request,就是HttpRequest的实例。它里面有一些常用的属性和方法可以提供给我们使用:

  • 请求方式method(POST/GET/.....)
  • 请求头信息META/headers,META返回的更详细,header返回的请求头信息常用的基本都在。反回的请求头信息都是JSON格式,常用的key信息
    • REMOTE_ADDR:获取请求的IP地址
    • HTTP_USER_AGENT:用户请求终端的信息
  • 获取请求传递参数
    • GET:GET请求参数
    • POST:POST请求参数
    • COOKIES:cookie信息
    • FILES:文件信息

示例代码:

 1 # urls.py文件照着图片敲,后面就只粘贴知识点代码
2
3 def http_request(request):
4 """请求练习"""
5 # 1. 请求方式
6 print(request.method)
7
8 # 2. 请求头信息
9 # 2.1 获取请求头信息META和headers
10 # META
11 headers = request.META #详细
12 print(headers)
13 # headers
14 print(request.headers) #简略
15
16 # 2.2 根据key获取具体属性信息
17 # 方式一:META.get(key)
18 ua = request.META.get('HTTP_USER_AGENT',None)
19 print(ua)
20 # 方式二:headers['key'],key的大小写都支持
21 print(request.headers['User-Agent'])
22 print(request.headers.get('user-agent'))
23
24 # 3. 获取请求参数request.Get.get()
25 name = request.GET.get('name','')
26 print(name)
27 print(request.GET.get('cookies'))
28
29 return HttpResponse('响应')

3.4.3.响应对象

常用响应对象

  • HttpResponse
  • HttpResponseRedirect:重定向
  • JsonResponse:响应json
  • FileResponse:响应文件

响应对象之间的关系

下面将针对常用的响应对象的属性和方法进行详细阐述

HttpResponse

  • status:设置HTTP响应状态码
  • status_code查看HTTP响应状态码
  • content_type:设置响应的类型
  • write():写入响应内容
1 def http_response(request):
2 """响应练习"""
3 resp = HttpResponse('响应内容',status=201,content_type='text/html; charset=utf-8')
4 resp.status_code = 200
5 resp.write('lalallalalal')
6 print(resp.status_code)
7 return resp

JsonResponse

1 def http_response(request):
2 """响应练习"""
3 user_info = {
4 'name':'张三',
5 'age':34
6 }
7 return JsonResponse(user_info)

FileResponse

常见的Content-Type

  • text/html:超文本标记语言文本(HTML)
  • text/plain:普通文本
  • text/xml:xml文档
  • image/png、image/jpeg、image/git:图片或图形
  • application/json:json数据类型

小结:请求对象就一个,响应对象可以有多种类型

3.5.视图快捷方法

知识点:

  • 了解 什么是重定向:这个自行百度
  • 掌握 如何实现重定向

实现URL访问的重定向

  • 方式一:使用HttpResponseRedirect重定向
  • 方式二:使用redirect()快捷方式

思考:程序异常怎么办?磁盘满了?数据库崩了?

3.6.内置的视图及重写

知识点:

  • 了解 常见的错误
  • 掌握 重写内置视图
  • 了解 处理静态文件

内置的错误处理视图

  • 400 Bad Request
  • 403 Forbidden
  • 404 Not Found
  • 500 Internal Server Error

重写内置的错误处理视图

  • 第一步:在项目urls.py中添加配置

    • handler500 = “my_project.views.page_500”,给handler500报错赋予处理错误视图函数,为空时,使用框架自带默认的
    • handler400,handler403,handler404同上配置
  • 第二步:切换到生产模式,将settings.py中的DEBUG改为False

示例

编写错误处理视图函数,实际项目中,位置一般不放在模块里面,因为这是所有模块可以公用的。

由于公用,因此添加到根目录的urls.py文件中。指定处理500报错的视图

模块业务逻辑视图中,raise抛出错误

配置文件中将环境改为生产环境,注意改为False时,ALLOWED_HOSTS属性不能为空值,否则报错。

访问raise抛出错误的模块url。

注意:400几个的handler,如果编写其对应的视图处理函数时,需要传递其他的参数。后面的笔记中用到400几个handler的时候,会进行详述。

static.serve处理静态文件

实际项目中会有许多静态文件,有用户上传的图片,有项目自带的js、css、图片等等。通过django如何展示呢,上面有提到可以通过fileresponse对象展示,还有没有其他办法?通过static.server进行处理

  • 第一步:在项目settings.py中添加配置

    • MEDIA_URL='/media/' :表示媒体media的URL。下面的示例没有添加该配置项,后面项目实战笔记会阐述该配置的作用。
    • MEDIA_ROOT=os.path.join(BASE_DIR,'medias') :我们静态文件存放的位置
  • 第二步:在urls.py中添加配置,将我们进行开发的时候,把项目当中的静态文件,放到django内置服务器当中,是我们可以直接进行访问。

图,官方说在开发模式下进行使用,为什么呢?因为django内置的服务器就是开发服务器,肯定不能满足生产环境的需要。在实际生产环境中呢,我们会使用其他的方式进行处理,后面会讲。此处重要内容是处理静态文件,知道通过django自带的服务器,可以访问静态文件。衍生跟项目相关的,后面笔记有。

处理静态文件示例:

在settings.py中添加MEDIA_ROOT,指明静态文件存放的位置。

如何指明静态文件存放的位置,使用绝对路径还是相对路径?在配置文件一开始,我们看到django自带的变量BASE_DIR代表的就是当前项目目录

在urls.py文件中添加图示配置,那这段代码是什么意思?如果我们开启了调试模式即开发模式。在urlpatterns中追加一个路由寻址,通过正则匹配,media开头任意结尾。调用的视图是django.views.static自带的serve。document_root指向我们刚刚在settings.py文件中新增的变量MEDIA_ROOT,即静态文件目录。

settings.py开启开发模式,访问地址(按照我们添加的规则,路由即media/开头),发现成功访问静态文件

思考:我们在settings.py文件添加静态文件目录MEDIA_ROOT时,发现有一个STATIC_URL变量,这个是干什么用的?

Django有两种静态文件:

  • medias 称为媒体文件夹,主要用来保存用户上传的文件,例如图片等,是变动的,由用户定义的文件,如用户头像, 用户上传的图片或视频等;
  • static 称为静态文件夹,主要存的是CSS, JavaScript, 网站logo等不变的文件,是不变的,形成网站的核心部件,如 CSS文件,JS文件,背景图片等;

settings中的STATIC_URL = 'static/'配置是静态路由映射,就是可以让django利用STATIC_URL来让浏览器可以直接访问static下的静态文件。在urls.py对static文件路径进行配置

setting文件中对STATIC_URL进行配置,默认是static目录,也可以自行定义。

3.7.使用class重写视图

思考:视图函数如何使用面向对象编程思想进行改写?

知识点:

  • 理解 类视图概念
  • 掌握 实现类视图
  • 了解 类视图的本质
  • 了解 内置通用视图

基于类的视图

  • 视图是一个可调用的对象,可以接受一个请求然后返回一个响应
  • 基于类的视图可以结构化你的视图,简化你的视图代码
  • 基于类的视图可以利用继承和混合(多重继承),重用/复用代码
  • 内置的视图拿来即用,代码更简洁

示例代码:

继承视图,配置模板地址。不像之前还需要加return render()返回响应,配置模板地址即可

配置URL,HomeView继承了TemplateView类,使用自带的as_view()方法通过HomeView类找到视图

成功访问

TemplateView是如何根据我传入一个模板文件名,就能找到模板呢?其实就是前面3.3.2的补充说明部分

常见的内置通用视图:后面笔记会对其详细阐述

小结:使用class改写视图实际上是面向对象改造的过程,Django内置的通用视图使代码更简单

Django(1) - 初识Django框架的更多相关文章

  1. python的Web框架:初识Django

    web应用程序 本质 socket服务端 浏览器本质是一个socket客户端 1. 服务器程序 socket请求 接受HTTP请求,发送HTTP响应. 比较底层,繁琐,有专用的服务器软件,如:Apac ...

  2. web框架之初识Django

    目录 一.web框架 1.1什么是web框架 1.2自制的简易web框架 1.3三大主流web框架简介 Django Flask Tornado 1.4动态网页与静态网页 二.初识Django框架 2 ...

  3. 初识django框架

    django框架 1.框架介绍 根据第一部分内容介绍,我们可以总结出一个web框架应该包含如下三部分:a.sockect服务.b.根据不同的url调用不同函数(包含逻辑).c.返回内容(模板渲染).常 ...

  4. Web框架之Django_01初识(三大主流web框架、Django安装、Django项目创建方式及其相关配置、Django基础三件套:HttpResponse、render、redirect)

    摘要: Web框架概述 Django简介 Django项目创建 Django基础必备三件套(HttpResponse.render.redirect) 一.Web框架概述: Python三大主流Web ...

  5. 初识Django —Python API接口编程入门

    初识Django —Python API接口编程入门 一.WEB架构的简单介绍 Django是什么? Django是一个开放源代码的Web应用框架,由Python写成.我们的目标是用Python语言, ...

  6. 巨蟒python全栈开发django2:初识django

    今日内容大纲: 1.起飞版web框架 2.自定制框架的流程 3.jinja2模板渲染初识 4.MVC&&MTV 5.django版本介绍及django安装 6.django初识(一些操 ...

  7. 微信开发python+django两个月的成功经历,django是个好框架!

        时间:大三 上学期没有用微信内置浏览器而纯对话开发,坑了自己好一下. 下学期选错bottle框架,以为轻量好,谁知开发中什么都自己来很痛苦. 选对了框架django,终于在大三最后的个把月里写 ...

  8. Django中的ORM框架使用小技巧

      Django中的ORM框架使用小技巧 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. Django对各个数据提供了很好的支持,包括PostgreSQL,MySQL,SQLite ...

  9. Django中使用bookstarp框架(4)

    Django中使用bookstarp框架(4) 注意:要使用bookstarp框架前,要先有css的基础 因为主要是研究后台的使用方法,就引入前端的框架,简化html上的耗时(主要是不想把时间浪费在前 ...

  10. django内置 Contenttypes 框架

    一.什么是Django ContentTypes? 1.Django 包含一个ContentTypes 应用,它可以追踪安装在你的Django 项目里的所有应用,并提供一个高层次的.通用的接口用于与你 ...

随机推荐

  1. 分布式存储系统之Ceph集群CephX认证和授权

    前文我们了解了Ceph集群存储池操作相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/16743611.html:今天我们来聊一聊在ceph上认证和授权的 ...

  2. P3834 【模板】可持久化线段树 2

    P3834 主席树模板,求区间第k小. 1 #include <bits/stdc++.h> 2 using namespace std; 3 #define lc tr[i].ch[0] ...

  3. OnionArch - 采用DDD+CQRS+.Net 7.0实现的洋葱架构

    博主最近失业在家,找工作之余,看了一些关于洋葱(整洁)架构的资料和项目,有感而发,自己动手写了个洋葱架构解决方案,起名叫OnionArch.基于最新的.Net 7.0 RC1, 数据库采用Postgr ...

  4. 自己动手写ls命令——Java版

    自己动手写ls命令--Java版 介绍 在前面的文章Linux命令系列之ls--原来最简单的ls这么复杂当中,我们仔细的介绍了关于ls命令的使用和输出结果,在本篇文章当中我们用Java代码自己实现ls ...

  5. 3.MongoDB系列之查询

    1. find简介 // 查询所有文档 db.users.find({}) // 查询指定条件文档 db.users.find({'name': 'shenjian'}) // 查询指定字段,1查询键 ...

  6. Linux系统管理_网络管理

    常用网络指令 yum -y install net-tools #安装ifconfig工具 ifconfig #查看网络配置 ifup ens33 #启用网卡 ifdown ens33 #禁用网卡 s ...

  7. .net core 配置跨域

    使用场景: 由于浏览器的同源策略,即浏览器的安全功能,同源策略会阻止一个域的js脚本和另一个域的内容进行交互. 会出现以下报错: 怎样属于非同源呢? 协议.域名.端口号只要有一个不相同就是属于非同源 ...

  8. Mockito使用方法(Kotlin)

    一.为什么要使用Mockito 1.实际案例 1.1 遇到的问题 对于经常维护的项目,经常遇到一个实际问题:需求不停改变,导致架构经常需要修改某些概念的定义. 对于某些十分基础又十分常用的概念,常常牵 ...

  9. netty系列之: 在netty中使用 tls 协议请求 DNS 服务器

    目录 简介 支持DoT的DNS服务器 搭建支持DoT的netty客户端 TLS的客户端请求 总结 简介 在前面的文章中我们讲过了如何在netty中构造客户端分别使用tcp和udp协议向DNS服务器请求 ...

  10. Day03.1:初学者安装IDEA后需要知道的小技巧

    初学者安装IDEA后需要知道的小技巧 1.输入psvm直接生成 main方法 2.输入sout可以直接生成输出语句 3.代码放大设置 4.注释颜色更改 5.代码字体大小通过Ctrl+鼠标滑轮控制的设置 ...