前言
今天写一篇关于Django 简单计算器的练习,对应我前两篇Django的博文里的那个练习,废话不多说,直接开搞
题目描述
写一个简单的计算器页面,能够在服务端进行简单加减乘除计算
- 分析
- 首先是前端页面的书写 — 模板
- 然后是后端代码的逻辑 — 视图函数
- 地址访问 — urls.py
实际操作
- 创建项目
django-admin startproject 项目名 结构: 如[mysite为项目名] mysite1/mysite1/。。。。
配置
-
建立配置
- 在内层mysite1里面创建 views.py 视图函数
- 在外层mysite1下创建templates 模板文件夹
-
路径配置
- 在settings.py文件夹里面,找到 templates[大写的],里面有个‘DIRS’,它实际上就和路径有关,在linux中就包含一个dir这样的命令
- DIRS后面配置模板文件夹的路径,BASE_DIR当前项目的路径所在
'DIRS': [os.path.join(BASE_DIR, 'templates')]
,- os.path.join可以拼接路径,防止平台的差异性 [如linux和windows]
- os这个模块需要导入,在上面写
import os
即可
-
关闭csrf
- 在进行post需求访问的时候,默认情况下会禁止,所以需要修改设置
- 在settings中
MIDDLEWARE
这里,注释掉'django.middleware.csrf.CsrfViewMiddleware',
前端页面的书写
- 模板书写,在模板文件夹中创建一个html文件
- 代码示例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>计算器</title>
</head>
<body>
<form action="/mycal/" method="post">
<input type="text" name="x" value={{count1}}>
<select name="op">
<!-- selected 是默认选项值 -->
<option value="add" {% if op == "add" %} selected {% endif %}>+加</option>
<option value="sub" {% if op == "sub" %} selected {% endif %}>-减</option>
<option value="mul" {% if op == "mul" %} selected {% endif %}>*乘</option>
<option value="div" {% if op == "div" %} selected {% endif %}>/除</option>
</select>
<input type="text" name="y" value={{count2}}>
<span>={{ result }}</span>
<div>
<input type="submit" value="开始计算">
</div>
</form>
</body>
</html>
- 代码解析:
- 首先这个与后端进行交互,选用form表单,action是访问地址,method是传参方式
- 两个数值输入框,name :value,这是与后端进行数据交互的重要根据
- 一个选项下拉框,当我们选择后修改默认值[防止计算完成后它变成默认加号]
- result就是结果,需要通过后端逻辑计算获得
- 提交按钮–开始计算,记住要放在form表单里面,在写之前我操作了一遍,写完后一直得不到结果,甚至AI都没检查出来,结果发现这里没写在form表单里面,差点吐血。
视图函数的书写
- 这个视图函数实际上就是上面说的后端 views.py
- 代码示例
from django.shortcuts import render
from django.http import HttpResponse
def mycal(request):
if request.method == "GET":
return render(request,"mycal.html")
elif request.method == "POST":
# 1. 获取用户输入的值 与 选项
count1 = int(request.POST.get("x")) # 字符串
count2 = int(request.POST.get("y"))
op = request.POST.get("op")
# 2. 判断选项,计算结果
if op == "add":
result = count1 + count2
elif op == "sub":
result = count1 - count2
elif op == "mul":
result = count1 * count2
elif op == "div":
try:
result = count1 / count2
except Exception as e:
result = e
return render(request,"mycal.html",locals())
else:
print("我也不知道")
- 逻辑分析
- 浏览器通过地址访问[GET]后端
- 视图函数接收判断[GET]
- 返回前端页面给浏览器,mycal.html就是刚才模板文件夹里面写得那个
- 此时在浏览器中展现出页面,输入两个数值,包括选择加减乘除的选项,点击开始计算
- 浏览器再次访问后端,在视图函数中先判读传参方式[POST],在进行计算
- 后端再返回数据等,注意除法的分母不能为0
确定url地址
- 位置:urls.py
- 导包:
from . import views
- 路径书写:
path('mycal/', views.mycal),
,前面那个就是浏览器访问地址
运行代码
- 打开终端,找到该项目下manage.py的位置
- 测试:ls 命令下出现manage.py
- 运行:
python3 manage.py runserver
,注意我这是Linux系统 - 浏览器访问:运行后下面出现
http://127.0.0.1:8000/
,把这个复制到浏览器中,再输入mycal/,就是上面那个地址,再按回车键,进行操作。
结语
这个练习实际上比较简单,但对于刚学Django的人来说,多少有些难度。写代码千万要注意细节。先写不变的,再写变化的,从简单的再到困难的进行书写代码