百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

测试人员快速上手Django指南

itomcoil 2025-03-01 14:18 20 浏览

引言

作为一个测试人员如果你有以下疑问,那么这篇文章将对你有很大帮助!

  • 网站的业务功能是如何实现的?参考章节:视图配置-实现网站业务功能
  • 服务器如何解析浏览器中的url?参考章节URL配置-提供url链接
  • 浏览器中的网页是如何展现给大家的?参考章节:模板-html页面的展示
  • 服务器如何与数据库交互?参考章节:模型-操控Mysql数据库

Django概要介绍

Django是一个开放源代码的Web应用框架,由Python写成。Django遵循 MVC 设计模式的框架。MVC是Model、View、Controller三个单词的简写,分别代表模型、视图、控制器。Django其实也是一个MTV 的设计模式。MTV是Model、Template、View三个单词的简写,分别代表模型、模版、视图 。但是在Django中,控制器接受用户输入的部分由框架自行处理,所以 Django 里更关注的是模型(Model)、模板(Template)和视图(Views),称为 MTV模式。它们各自的职责如下:


模型(Model),即数据存取层,处理与数据相关的所有事务: 如何存取、如何验证有效性、包含哪些行为以及数据之间的关系等。

模板(Template),即表现层,处理与表现相关的决定: 如何在页面或其他类型文档中进行显示。

视图(View),即业务逻辑层,存取模型及调取恰当模板的相关逻辑。模型与模板的桥梁。

Django是实现了WSGI协议的web框架,WSGI的全称是Web Server Gateway Interface。具体来说,WSGI是一个规范,定义了Web服务器如何与Python应用程序进行交互,使得使用Python写的Web应用程序可以和Web服务器对接起来,至于代码的实现细节这里就不做详细介绍了。

架构图



l 安装

pip install Django 也可以使用阿里镜像

pip install Django -i https://pypi.tuna.tsinghua.edu.cn/simple

l 创建项目

在cmd窗口中 运行 django-admin startproject testdj

备注:安装好Django 后, django-admin.exe被安装到C:\Python37\Scripts目录

项目说明:

  1. testdj: 项目的容器。
  2. manage.py: 一个实用的命令行工具,可让你以各种方式与该 Django 项目进行交互。
  3. testdj /__init__.py: 一个空文件,告诉 Python 该目录是一个 Python 包。
  4. testdj /settings.py: 该 Django 项目的设置/配置。
  5. testdj /urls.py: 该 Django 项目的 URL 声明; 一份由 Django 驱动的网站"目录"。
  6. testdj /wsgi.py: 一个 WSGI 兼容的 Web 服务器的入口,以便运行你的项目。
  • Pycharm配置

在pycharm中导入项目testdj,进入运行置,如下图:

  • 环境测试

然后运行项目,在浏览器中输入127.0.0.1:8000 ,如下图所示



视图配置-实现网站业务功能

视图:即一个python函数,可以叫 视图函数,或者简称 视图,定义在 应用/views.py 文件中。它的作用是接收处理请求并响应请求,每一个用户请求,都对应着一个视图(和url地址),由视图处理请求后,再返回html页面内容给浏览器显示。

在先前创建的 testdj目录下的 testdj目录新建一个 view.py 文件,并输入代码:

from django.http import HttpResponse
from django.shortcuts import render
def hello(request):
return HttpResponse ("Hello world ! ")

URL配置-提供url链接

绑定 URL 与视图函数。即输入url后,完成与之对应的视图函数的调用。

打开 urls.py 文件,删除原来代码,将以下代码复制粘贴到 urls.py 文件中:

from django.conf.urls import url

from testdj import view

urlpatterns = [

url(r'^$', view.hello) #视图配置章节中定义的视图函数

]

重新启动Django服务器,输入127.0.0.1:8000,浏览器显示如下:


模板-html页面的展示

模板是一个文本,用于分离文档的表现形式和内容。

在testdj应用下面创建一个目录templates,然后可以在该目录下放置html文件,如下图所示:



在hello.html 文件中添加代码如下:

{{ hello }}

在setting.py中设置templates的位置

TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [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',
],
},
},
]

我们现在修改 view.py,增加一个新的对象,用于向模板提交数据:

def hello (request):
context = {}
context['hello'] = 'Hello World!'
return
render(request, 'hello.html', context)

重启Django服务器,输入127.0.0.1:8000/hello,浏览器显示如下:


可见我们成功的把“Hello World!”赋值给了hello.html中的变量{{ hello }}

Django中服务器给浏览器返回数据主要通过函数HttpResponse、render和redirect

  • HttpResponse

它是作用是内部传入一个字符串参数,然后发给浏览器。

例如:

return HttpResponse ("Hello world ! ")

  • render

render方法可接收三个参数,一是request参数,二是待渲染的html模板文件,三是保存具体数据的字典参数。它的作用就是将数据填充进模板文件,最后把结果返回给浏览器。

例如:

context = {}
context['hello'] = 'Hello World!'
return render(request, 'hello.html', context)

  • redirect

接受一个URL参数,表示让浏览器跳转去指定的URL。

例如:

return redirect("https://www.baidu.com")

模型-操控Mysql数据库

  • Client的安装

pip install mysqlclient

  • 配置文件设置db信息

在testdj /settings.py: 设置db连接信息

DATABASES = {

'default':

{

'ENGINE': 'django.db.backends.mysql', # 或者使用 mysql.connector.django

'NAME': 'test',

'USER': 'test',

'PASSWORD': '123456',

'HOST':127.0.0.1,

'PORT':'3306',

}

}

  • 配置模型

创建应用

Django规定,如果要使用模型,必须要创建一个应用。我们使用以下命令创建应用 DjModel。

django-admin startapp DjModel

修改models.py

我们修改 DjModel/models.py 文件,代码如下:

# models.py

from django.db import models

class Test(models.Model):

title = models.CharField('标题', max_length=200, unique=True)

body = models.TextField('正文')

以上的类名代表了数据库表名,且继承了models.Model,类里面的字段代表数据表中的字段(name),数据类型则是CharField和TextField, max_length 参数限定长度。

在配置文件中添加model应用

接下来在settings.py中找到INSTALLED_APPS这一项,如下:

INSTALLED_APPS = (

'django.contrib.admin',

'django.contrib.auth',

'django.contrib.contenttypes',

'django.contrib.sessions',

'django.contrib.messages',

'django.contrib.staticfiles',

'DjModel', # 添加此项

)

创建表结构并与数据库信息同步

在命令中运行如下命令

$ python manage.py migrate # 创建表结构

$ python manage.py makemigrations TestModel # 让 Django 知道我们在我们的模型有一些变更

$ python manage.py migrate TestModel # 创建表结构

makemigrations 和 migrate命令

makemigrations 和 migrate 工作原理分别是什么

makemigrations:根据检测到的模型创建新的迁移。迁移的作用,更多的是将数据库的操作,以文件的形式记录下来,方便以后检查、调用、重做等等。执行makemigrations命令会在该app下建立 migrations目录,并记录下你所有的关于modes.py的改动,比如0001_initial.py,

migrate:使数据库状态与当前模型集和迁移集同步。说白了,就是将对数据库的更改,主要是数据表设计的更改,在数据库中真实执行。例如,新建、修改、删除数据表,新增、修改、删除某数据表内的字段等等。

  • Django模型中的API超控数据库

增即创建新的对象或添加新的条目。如果我们要给数据库添加一篇新的文章,Django提供了2种常见操作方式。

方法一,传统save方法。

obj = Test(title="My first Test", body="My first Test body")

obj.save()

注意: 该方法如果不选择save(), 创建的对象将不会保存到数据库中去。正因为如此,Django还提供了更便捷的create方法。

方法二,便捷的create方法。

Test.objects.create(title="My first Test", body="My first Test body")

注意: 对Django自带auth模块中的User模型操作,比如创建新的用户时,请用create_user方法。该方法会将密码自动加Hash存储到数据库中。

from django.contrib.auth.models import User

user = User.objects.create_user(username='john',

email='john@gmail.com',

password='somepwd')

删即删除一个已有对象或从表中删除一个已有条目。Django也允许同时删除多个对象或条目。

案例一,删除所有文章 (请慎用!!)

Test.objects.all().delete()

案例二,删除标题里含有python的所有文章(不区分大小写)

Test.objects.filter(title__icontains="python").delete()

改既可以用save方法,也可以用update方法。其区别在于save方法不仅可以更新数据中现有对象数据,还可以创建新的对象。而update方法只能用于更新已有对象数据。一般来说,如果要同时更新多个对象数据,用update方法更合适。

案例一,利用save方法更新某一文章标题

Test = Test.objects.get(id=1)

Test.title = "New Test title"

Test.save()

案例二,利用update方法更新某一文章标题

Test = Test.objects.get(id=1).update(title='new title')

案例三,利用update方法更新多篇文章标题

Test = Test.objects.filter(title__icontains='python').update(title='Django')

Django对于数据库的查询主要是get和filter等方法。我们来看几个案例。

案例一,查询所有数据

Test.objects.all()

Test.objects.all().values()

# 只获取title列表-字典形式

Test.objects.all().values('title')

# 只获取title列表- 元组形式,只有value,没有key

Test.objects.all().values_list('title')

注意:使用values和values_list可以减少数据库查询工作量。如果只需要在模板中使用某些字段,而不是全部字段,建议使用values和values_list。

案例二,查询某一条数据

Test.objects.get(id=1)

案例三,模糊查询返回数据集, 并去重

Test.objects.filter(title__icontains='python').distinct()

  • Django执行自定义sql

导入 form django.db import connection,transaction

django.db.connection:代表默认的数据库连接
django.db.transaction:代表默认数据库事务(transaction)
connection.cursor(): 获得一个游标(cursor)对象
cursor.execute(sql, [params]):执行sql
cursor.fetchone():获取一个对象数据

cursor.fetchall():返回结果行

如果执行修改操作,则调用
transaction.commit_unless_managed()来保证你的更改提交到数据库。

例如:

sql = 'SELECT * FROM `djangomodel_test2` WHERE `djangomodel_test2`.`name`="kevin"'
cursor = connection.cursor ()
cursor.execute (sql)
fetchall = cursor.fetchall ()

相关推荐

selenium(WEB自动化工具)

定义解释Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7,8,9,10,11),MozillaF...

开发利器丨如何使用ELK设计微服务中的日志收集方案?

【摘要】微服务各个组件的相关实践会涉及到工具,本文将会介绍微服务日常开发的一些利器,这些工具帮助我们构建更加健壮的微服务系统,并帮助排查解决微服务系统中的问题与性能瓶颈等。我们将重点介绍微服务架构中...

高并发系统设计:应对每秒数万QPS的架构策略

当面试官问及"如何应对每秒几万QPS(QueriesPerSecond)"时,大概率是想知道你对高并发系统设计的理解有多少。本文将深入探讨从基础设施到应用层面的解决方案。01、理解...

2025 年每个 JavaScript 开发者都应该了解的功能

大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发。1.Iteratorhelpers开发者...

JavaScript Array 对象

Array对象Array对象用于在变量中存储多个值:varcars=["Saab","Volvo","BMW"];第一个数组元素的索引值为0,第二个索引值为1,以此类推。更多有...

Gemini 2.5编程全球霸榜,谷歌重回AI王座,神秘模型曝光,奥特曼迎战

刚刚,Gemini2.5Pro编程登顶,6美元性价比碾压Claude3.7Sonnet。不仅如此,谷歌还暗藏着更强的编程模型Dragontail,这次是要彻底翻盘了。谷歌,彻底打了一场漂亮的翻...

动力节点最新JavaScript教程(高级篇),深入学习JavaScript

JavaScript是一种运行在浏览器中的解释型编程语言,它的解释器被称为JavaScript引擎,是浏览器的一部分,JavaScript广泛用于浏览器客户端编程,通常JavaScript脚本是通过嵌...

一文看懂Kiro,其 Spec工作流秒杀Cursor,可移植至Claude Code

当Cursor的“即兴编程”开始拖累项目质量,AWS新晋IDEKiro以Spec工作流打出“先规范后编码”的系统工程思维:需求-设计-任务三件套一次生成,文档与代码同步落地,复杂项目不...

「晚安·好梦」努力只能及格,拼命才能优秀

欢迎光临,浏览之前点击上面的音乐放松一下心情吧!喜欢的话给小编一个关注呀!Effortscanonlypass,anddesperatelycanbeexcellent.努力只能及格...

JavaScript 中 some 与 every 方法的区别是什么?

大家好,很高兴又见面了,我是姜茶的编程笔记,我们一起学习前端相关领域技术,共同进步,也欢迎大家关注、点赞、收藏、转发,您的支持是我不断创作的动力在JavaScript中,Array.protot...

10个高效的Python爬虫框架,你用过几个?

小型爬虫需求,requests库+bs4库就能解决;大型爬虫数据,尤其涉及异步抓取、内容管理及后续扩展等功能时,就需要用到爬虫框架了。下面介绍了10个爬虫框架,大家可以学习使用!1.Scrapysc...

12个高效的Python爬虫框架,你用过几个?

实现爬虫技术的编程环境有很多种,Java、Python、C++等都可以用来爬虫。但很多人选择Python来写爬虫,为什么呢?因为Python确实很适合做爬虫,丰富的第三方库十分强大,简单几行代码便可实...

pip3 install pyspider报错问题解决

运行如下命令报错:>>>pip3installpyspider观察上面的报错问题,需要安装pycurl。是到这个网址:http://www.lfd.uci.edu/~gohlke...

PySpider框架的使用

PysiderPysider是一个国人用Python编写的、带有强大的WebUI的网络爬虫系统,它支持多种数据库、任务监控、项目管理、结果查看、URL去重等强大的功能。安装pip3inst...

「机器学习」神经网络的激活函数、并通过python实现激活函数

神经网络的激活函数、并通过python实现whatis激活函数感知机的网络结构如下:左图中,偏置b没有被画出来,如果要表示出b,可以像右图那样做。用数学式来表示感知机:上面这个数学式子可以被改写:...