django的基本使用(一)

一、简介

现在在实际的项目开中分为两种开发模式:

1.前后端不分离

在运维开发的岗位中,前后端是否分离完全取决于技术人的决策。如果使用前后端不分离,在python语言中,基本就会用到django、flask框架的模板技术。前后端全部由后端框架(jango、flask)框架完成。如果功能比较简单还可以,如果功能非常复杂。前后端不分离的模式就有些不太合适了

2.前后端分离

在大型的项目开发中或者说企业级项目开发中,基本上都是前后端分离模式进行开发。也就是前端使用前端框架进行UI开发,比如vue、react等前端框架进行开发。后端使用python、go、java等语言相关的框架进行后端开发。个人感觉在运维开发岗中也应该使用前后端分离的模式进行开发。因为分离开,前端UI开发变得更加丰富,有很多丰富的UI组件库可以使用。还有就是分离开后,后端在更换开发语言、或者重构是比较方便的。

3.django简介

django是python的后端框架,相对于flask来讲是一个大而全的框架。很多功能都自带,如果要是进行web开发,建议使用django,如果不是非常复杂的功能、接口开发,首选flask,非常轻量化,非常的清爽。本文章对于django的知识点着重放在DRF上,对于模板语法不学习了,因为学习前端的vue框架已经是趋势,现在的岗位既要保证后端功能,又要保证UI的美观。

二、django安装

1.版本介绍

django的几个长期维护(LTS)版本

Django版本起始维护时间Python版本
1.11(LTS)2017.4—2020.42.7、3.4、3.5、3.6、3.7
2.2(LTS)2019.4—2022.43.5、3.6、3.7、3.8
3.2(LTS)2021.4—2024.43.6、3.7、3.8、3.9、3.10
4.2(LTS)2023.4—2026.43.9、3.10

2.python版本

(django_test) E:\code\project\后端项目\python_project\django_test>python -V
Python 3.8.10

3.安装

使用清华大学镜像站进行安装.

pip install django==3.2.20  --index https://pypi.mirrors.ustc.edu.cn/simple/ 

如果想看到历史版本,可以在安装的时候指定一个不存在的版本,就会返回历史版本

pip install django==10.1.1  --index https://pypi.mirrors.ustc.edu.cn/simple/返回结果如下:
ERROR: Could not find a version that satisfies the requirement django==10.1.1 (from versions: 1.1.3, 1.1.4, 1.2, 1.2.1, 1.2.2, 1.2.3, 1.2.4, 1.2.5, 1.2.6, 1.2.7, ......4.2.1, 4.2.2, 4.2.3, 4.2.4, 4.2.5, 4.2.6, 4.2.7, 4.2.8, 4.2.9)
ERROR: No matching distribution found for django==10.1.1

查看版本

pip freeze |findstr /i django
Django==3.2.20

4.创建一个项目

创建语法: test1为项目名称。 加上./参数 不会重复创建目录

django-admin startproject test1 ./

5.启动项目

python manage.py runserver

6.项目根目录介绍

项目启动后,目录如下

test1 __init__.pyasgi.py      settings.py  #包含 Django 项目的配置信息,如数据库连接、静态文件路径等urls.py      #定义项目中的 URL 映射关系,将 URL 与视图函数或类绑定wsgi.py      #定义了 WSGI 接口,用于部署 Django 项目到生产服务器。
db.sqlite3
manage.py        #用于管理 Django 项目的命令行工具

7.创建应用

login为应用名称。应用会单独生成一个目录

django-admin startapp login

7.1 应用目录介绍

login 应用目录migrations admin.py    apps.py    models.py   tests.pyviews.py   # 视图函数文件

7.2 应用注册

一个应用要想使用,必须需要注册到django中,编辑项目目录下的配置文件setting.py

INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','login', # 将创建的login 应用注册到django中
]

三、django的基本使用

1.简单视图函数

django的视图函数必须在应用的views.py文件中创建。在login应用中编辑views.py

from django.http import HttpResponse# 视图函数的形参必须要加上request
def login(request):text = "<h1>登陆页面<h1>"return  HttpResponse(text)

2.路由配置

将用户的http请求通过路由配置转发到 视图函数中。
编辑项目根目录下的路由配置文件 url.py

from django.contrib import admin
from django.urls import path
# 导入视图函数
from login.views import loginurlpatterns = [path('admin/', admin.site.urls),# 配置路由,与视图函数对应, 这里的url后边一定要加上/,path('login/',login),
]

测试:

http://127.0.0.1:8000/login

这就是一个最简单的实例

四、路由

1.分布式路由

如果项目比较大,所有的路由全部写在主路由配置文件中会比较复杂,所有django提供了分布式路由

1.1.设置主路由

from django.contrib import admin
# 导入include方法
from django.urls import path,includeurlpatterns = [path('admin/', admin.site.urls),#将 用户访问login的路由转发到login应用的urls文件当中path('login/',include('login.urls')),
]

1.2.设置子路由

在login应用下新建urls.py文件

from django.urls import  path
# 导入视图函数
from .views import *urlpatterns = [# 根路径路由设置path('', login),
]

1.3.视图函数

from django.http import HttpResponsedef login(request):text = "<h1>登陆页面123<h1>"return  HttpResponse(text)

测试:再次访问127.0.0.1:8000/login

2.路由中的url参数

在url中可以使用 "<>"来定义URL参数,URL参数是URL中的变量部分。比如:用户下载不同的文件,因为文件有很多,所有无法提前确定用户下载的文件名是什么,所以将用户下载的文件名就可以在URL中定义为变量。

2.1 新建files应用

django-admin startapp files

2.2 创建files应用路由

设置总路由

from django.contrib import admin
from django.urls import path,includeurlpatterns = [path('files/',include('files.urls')),
]

设置子路由,在files应用下创建urls.py文件

from django.urls import path
from .views import *urlpatterns = [path('download/<str:filename>/',download),
]

2.3.视图函数

在视图函数中,除了必要的request形参外,需要加上url中传递过来的变量
注意:这里的filename变量名必须和url中定义的变量名一致

from django.http import HttpResponsedef download(request,filename):return HttpResponse(filename)

视图类的写法.下边的视图中就会写到视图类知识

from django.views import  View
from django.http import HttpResponseclass download(View):def get(self,request,filename):return HttpResponse(filename)

五、django视图

1.request

1.1 GET请求

方法含义
request.method获取http请求方法
request.GET获取get方法所有参数
request.GET.get(‘key’)获取get方法才参数的某个key值
request.Get.getlist(‘key’)如果get方法有多个相同的key,将会全部取出
request.POST获取POST所有数据
request.POST.get(‘key’)获取post方法的某个数据
request.path获取url

视图函数实例

from django.http import HttpResponsedef login(request):print(request.method)print(request.GET)print(request.GET.get('name'))print(request.GET.getlist('name'))return  HttpResponse('Ok')

访问并传递参数:

http://127.0.0.1:8000/login?name=zhangsan&name=lisi&passwd=123

结果如下:

http请求方法: GET 
获取查询参数对象:<QueryDict: {'name': ['zhangsan', 'lisi'], 'passwd': ['123']}>
获取查询对象参数的某个值:lisi
获取所有相同名称的key列表:['zhangsan', 'lisi']

1.2 POST请求

表单类型数据,表单类型数据有两种:

一种是form-data数据: 上传内容既可以传文本,也可以传二进制数据(文件、视频、图片等)
一种是x-www-form-urlencoded数据: 上传的数据只能是符串或者数字,不可以是文件、视频、图片等

1.表单数据

在发送POST请求之前,禁用django的csrf设置。编辑setting.py文件

MIDDLEWARE = [......# 禁用这一行内容# 'django.middleware.csrf.CsrfViewMiddleware',......
]

视图函数实例

from django.http import HttpResponsedef login(request):print('http请求方法: {}'.format(request.method))print(request.POST)print(request.POST.get('name'))return  HttpResponse('Ok')

使用postman 访问url。body中的form-data 参数设置name为zhangsan

http://127.0.0.1:8000/login/

结果如下:

http请求方法: POST 
<QueryDict: {'name': ['zhangsan']}> 
zhangsan
2.json数据

视图函数实例

from django.http import HttpResponse
import jsondef login(request):print('http请求方法: {}'.format(request.method))print(request.POST)print("获取表单数据的方法:{}".format(request.POST.get('name')))print("获取json数据的方法{}".format(json.loads(request.body)))return  HttpResponse('Ok')

postman提交json数据,结果如下:

http请求方法: POST 
<QueryDict: {}> 
获取表单数据的方法:None
获取json数据的方法{'name': 'zhangsan', 'password': 123, 'age': 20}

2.Response

2.1 返回字符串

201为自定义状态码

return  HttpResponse('Ok',201)

2.2 返回json数据

from django.http import HttpResponse,JsonResponse
import json
data = {"code": "201","message": "success"
}def login(request):return  JsonResponse(data)

3.视图装饰器

视图装饰器的主要作用是,限制用户只能使用某种方法来访问此视图函数。当限制了用户使用特定的方法访问视图函数时,返回结果为405,而不在是500

from django.views.decorators.http import  require_http_methods,require_GET,require_POST# @require_GET 或者@require_POST 或者 @require_http_methods(['GET','POST'])
@require_POST
def login(request):return  HttpResponse("ok")

4.视图类

django还给我们提供了另外一种和视图函数一样功能的方法,那就是"视图类"。

4.1 定义视图类

views.py文件内容如下

from django.http import HttpResponse
# 导入视图类
from django.views import  View# 自定义的视图类必须要继承VIew这个基类.
# 类中的方法名字就是用户用什么method方法请求的,并且必须使用小写
class login(View):def get(self,request):return  HttpResponse('get方法')def post(self,request):return  HttpResponse('post 方法')

4.2 定义视图类路由

总路由文件不见,编辑子路由,

urlpatterns = [# 这里的as_view() 是固定写法。path('', login.as_view()),
]

as_view中的view函数做什么了事情?
1.每一次用户请求调用as_view函数的时候,as_view把view视图函数返回
2.view函数会根据请求生成对应的 “实例” ,这样的就用不同的 “实例” 区分出来的了不同的请求,也就是说区分出来了每一个独立的请求。也是是和普通视图函数最大的区别
3.最后在通过dispatch函数在派发到对应的 方法 上去

测试:

使用get和post方法访问

curl http://127.0.0.1:8000/login/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/680196.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图(高阶数据结构)

目录 一、图的基本概念 二、图的存储结构 2.1 邻接矩阵 2.2 邻接表 三、图的遍历 3.1 广度优先遍历 3.2 深度优先遍历 四、最小生成树 4.1 Kruskal算法 4.2 Prim算法 五、最短路径 5.1 单源最短路径-Dijkstra算法 5.2 单源最短路径-Bellman-Ford算法 5.3 多源最…

MySQL简单配置GTID

前期规划 IP地址 角色 系统版本 内核 软件包名称 192.168.2.3 Mysql主服务器 CentOS Stream 9 5.14.0- 381.el9.x86_64 mysql-8.2.0-linux-glibc2.17-x86_64.tar.xz 192.168.2.4 Mysql从服务器 CentOS Stream 9 5.14.0- 381.el9.x86_64 mysql-8.2.0-linux-glibc…

防火墙的区域隔离

防火墙的区域隔离是指将网络划分为不同的安全区域&#xff0c;并设置防火墙规则来控制和过滤各个区域之间的数据流。这种隔离可以有效地保护网络安全&#xff0c;防止未经授权的访问和恶意攻击。 在实际应用中&#xff0c;防火墙的区域隔离有以下几个方面的考虑&#xff1a; …

Day 43 | 动态规划 1049. 最后一块石头的重量 II 、494. 目标和 、 474.一和零

1049. 最后一块石头的重量 II 题目 文章讲解 视频讲解 思路&#xff1a;dp[j] 表示容量为 j 的背包&#xff0c;最多可以背最大重量为dp[j]。 class Solution {public int lastStoneWeightII(int[] stones) {int sum 0;for (int i 0; i < stones.length; i) {sum stone…

Netty Review - ServerBootstrap源码解析

文章目录 概述源码分析小结 概述 ServerBootstrap bootstrap new ServerBootstrap();bootstrap.group(bossGroup, workerGroup).channel(NioServerSocketChannel.class).option(ChannelOption.SO_BACKLOG, 1024).childHandler(new ChannelInitializer<SocketChannel>() …

微信小程序(四十二)wechat-http拦截器

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.wechat-http请求的封装 2.wechat-http请求的拦截器的用法演示 源码&#xff1a; utils/http.js import http from "wechat-http"//设置全局默认请求地址 http.baseURL "https://live-api.ith…

Java中新启线程的方式

扩展Thread类实现Runnable接口实现Callable接口 import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask;/*** 新起线程的方式*/ public class Main {private static class UserThread extends Thre…

HCIA-HarmonyOS设备开发认证V2.0-3.2.轻量系统内核基础-中断管理

目录 一、中断基础概念二、中断管理使用说明三、中断管理模块接口四、代码分析&#xff08;待续...&#xff09; 一、中断基础概念 在程序运行过程中&#xff0c;出现需要由 CPU 立即处理的事务时&#xff0c;CPU 暂时中止当前程序的执行转而处理这个事务&#xff0c;这个过程…

指纹浏览器如何颠覆传统浏览器的使用?

传统浏览器在互联网时代发挥了巨大的作用&#xff0c;但随着科技的不断进步和用户需求的不断变化&#xff0c;新一代的浏览器工具开始崭露头角。指纹浏览器作为一种创新性的浏览器工具&#xff0c;正逐渐颠覆传统浏览器的使用方式。本文将探讨指纹浏览器如何颠覆传统浏览器&…

【蓝桥杯单片机记录】IO基础与LED控制

目录 一、IO基础 1.1 IAP15F2K61S2芯片原理图 1.2不同工作模式 二、新建工程的一些补充 2.1 keil中没有IAP15F2K61S2的头文件 解决&#xff1a;在isp软件中找到如下​编辑 2.2keil中的芯片选择 2.3推荐字体 三、sbit关键字 四、LED控制 4.1原理图 4.2不能直接通过IO…

unity2017 遇到visual studio 2017(社区版) 30日试用期到了

安装unity2017 遇到visual studio 2017 30日试用期到了&#xff0c;网上百度搜了好多方法都没有成功。 最后用了这个方法&#xff1a; 1)启动vs2017&#xff0c;在弹出要登录的窗口之前&#xff0c;迅速的点击工具-》选项-》账户&#xff0c;勾选在添加账户或对账户重新进行身…

origin技巧

origin技巧 1.去掉白边2.曲线平滑3.合并多层图例3.图例换方向 1.去掉白边 ctrlu 2.曲线平滑 3.合并多层图例 3.图例换方向 图例右键 “图例” 水平排布修改图例字&#xff1a;双击图例修改 https://blog.csdn.net/m0_47746156/article/details/121295151 https://blog.csdn.…

MacOS - 菜单栏上显示『音量』

教程步骤 点击打开系统偏好『设置』&#xff0c;并找到『控制中心』 在『控制中心模块』找到『声音』&#xff0c;选择『始终在菜单栏显示』

1g的视频怎么压缩到200m?3个步骤解决~

把1G的文件压缩到200M&#xff0c;可以有效节省存储空间&#xff0c;加快传输速度&#xff0c;在某些情况下&#xff0c;压缩文件可以提供更好的安全性&#xff0c;例如通过加密或压缩算法保护文件内容。下面就向大家介绍3个好用的方法。 方法一&#xff1a;使用嗨格式压缩大师…

游泳可以戴的耳机有哪些,游泳耳机哪个牌子好性价比高

在游泳训练中&#xff0c;尤其是在进行长距离游泳、控制节奏和进行长时间游泳燃脂时&#xff0c;很容易感到单调乏味。为了帮助自己完成每一个来回&#xff0c;许多游泳运动员除了依赖能量棒和功能饮料外&#xff0c;还会选择通过音乐提高注意力和兴奋度。研究表明&#xff0c;…

2.11日学习打卡----初学RocketMQ(二)

2.11日学习打卡 一. RocketMQ整合springboot 首先配置pom.xml文件 <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><scope>annotationProcessor</scope></dependency><dependency>…

【JavaScript】如何压缩和解压数组

两个或多个数组的 Zipping&#xff0c;这就像把不同口袋里的零食倒在一起&#xff0c;拼成一盒豪华版“数组什锦礼包”。想象一下 const arrays [[a, b], [1, 2], [true, false]]; const zipped [[a, 1, true], [b, 2, false]]; 瞧&#xff0c;现在是不是觉得Zipping这个概念…

记录一下,我使用stm32实现pwm波输入,以及对频率和占空比的计算,同时通过串口输出(实现-重要)

1&#xff0c;首先看下半物理仿真 看下我的配置&#xff1a; 看下计算方法以及matlab的仿真输出的数据&#xff1a; timer3的ch2是选择高电平&#xff0c;计算频率 timer3的ch1是选择的是低电平&#xff0c;用来计算周期 其中TemPIpre表示的是CH2输出的值&#xff0c; TemPI…

用HTML5 + JavaScript绘制花、树

用HTML5 JavaScript绘制花、树 <canvas>是一个可以使用脚本 (通常为JavaScript) 来绘制图形的 HTML 元素。 <canvas> 标签/元素只是图形容器&#xff0c;必须使用脚本来绘制图形。 HTML5 canvas 图形标签基础https://blog.csdn.net/cnds123/article/details/112…

Linux--常用命令(详解)

详细目录 一、终端命令格式二、显示文件列表命令-ls2.1作用2.2格式2.3 ls常用选项2.3.1 ls -a2.3.2 ls -l(等价于 ll)2.3.2 ls -h 三、相对路径与绝对路径3.1绝对路径3.2相对路径 四、目录操作命令 -cd4.1作用4.2格式4.3案例4.3.1 cd -&#xff1a; 返回上一次所在目录4.3.2 cd…