Web實戰:基于Django與Bootstrap的在線計算器

文章目錄

  • 寫在前面
  • 實驗目標
  • 實驗內容
    • 1. 創建項目
    • 2. 導入框架
    • 3. 配置項目
      • 前端代碼
      • 后端代碼
    • 4. 運行項目
  • 注意事項
  • 寫在后面

寫在前面

本期內容:基于Django與Bootstrap的在線計算器

實驗環境:

  • vscode
  • python(3.11.4)
  • django(4.2.7)
  • bootstrap(3.4.1)
  • jquery(3.7.1)

實驗目標

項目功能主要是實現一個在線計算器。在輸入框中輸入計算式,單擊“計算”按鈕可以在輸出框中輸出結果。前端采用了 Bootstrap進行制作,提供輸入框和按鈕讓用戶進行信息輸入,然后將計算式通過 Ajax方式傳輸給后臺進行計算。后臺采用Django 進行開發,獲取到前端發送的數據后利用Python的子進程模塊subprocess來計算式子,并將計算結果返回給前端進行顯示。

在線計算器

實驗內容

1. 創建項目

1.打開vscode命令行輸入以下命令創建一個名為jsq的項目

django-admin startproject jsq

2.利用cd命令切換到manage.py文件所在目錄,輸入以下命令創建一個名為app的應用

cd jsq
python manage.py startapp app

3.輸入以下命令啟動項目

python manage.py runserver

1

4.在瀏覽器中輸入“http://127.0.0.1:8000”檢查web界面是否啟動成功

出現如下界面說明web界面啟動成功

2

2. 導入框架

1.在官網下載bootstrap源代碼后解壓

3

2.在app文件夾下創建一個static子文件夾

3.在解壓的文件中找到dist文件夾,將該文件夾中的css,fonts,js三個子文件夾復制到static文件夾下面,并在static文件夾中新建一個名為img的子文件夾(用于存放圖片)

4

4.進入jQuery官網,復制網頁內容,保存為jquery.min.js文件放到static目錄下的js子文件夾中。

5
6
7

3. 配置項目

前端代碼

1.在app文件夾下創建一個templates子文件夾,然后在templates文件夾下面創建一個index.html文件,編輯該文件,填入以下代碼:

{% load static %}
<!DOCTYPE html>
<html><head><meta charset = "utf-8"><meta http-equiv = "X-UA-Compatible" content = "IE=edge"><meta name = "viewport" content = "width=device-width,initial-scale=1"><title>在線計算器</title><link rel = "stylesheet" href = "{% static 'css/bootstrap.min.css' %}"/><link rel = "stylesheet" href = "{% static 'css/style.css'%}"/><script src = "{% static 'js/jquery.min.js' %}"></script><script src = "{% static 'js/bootstrap.min.js' %}"></script></head><body><div class="container-fluid"><div class = "row"><div class = "col-xs-1 col-sm-4"></div><div id = "computer" class="col-xs-10 col-sm-6"><input type="text" id="txt_code" name="txt_code" value="" class="form-control input_show" placeholder="公式計算" disabled/><input type="text" id="txt_result" name="txt_result" value="" class="form-control input_show" placeholder="結果" disabled/><br /><div><button type="button" class="btn btn-default btn_num" onclick="fun_7()">7</button><button type="button" class="btn btn-default btn_num" onclick="fun_8()">8</button><button type="button" class="btn btn-default btn_num" onclick="fun_9()">9</button><button type="button" class="btn btn-default btn_num" onclick="fun_div()">÷</button><br/><button type="button" class="btn btn-default btn_num" onclick="fun_4()">4</button><button type="button" class="btn btn-default btn_num" onclick="fun_5()">5</button><button type="button" class="btn btn-default btn_num" onclick="fun_6()">6</button><button type="button" class="btn btn-default btn_num" onclick="fun_mul()">×</button><br/><button type="button" class="btn btn-default btn_num" onclick="fun_1()">1</button><button type="button" class="btn btn-default btn_num" onclick="fun_2()">2</button><button type="button" class="btn btn-default btn_num" onclick="fun_3()">3</button><button type="button" class="btn btn-default btn_num" onclick="fun_sub()">-</button><br/><button type="button" class="btn btn-default btn_num" onclick="fun_0()">0</button><button type="button" class="btn btn-default btn_num" onclick="fun_00()">00</button><button type="button" class="btn btn-default btn_num" onclick="fun_dot()">.</button><button type="button" class="btn btn-default btn_num" onclick="fun_add()">+</button></div><div><br/><button type = "button" class = "btn btn-success btn-lg btn_clear"id = "lgbut_clear" onclick="fun_clear()">清空</button><button type = "button" class = "btn btn-success btn-lg"id = "lgbut_compute">計算</button></div></div><div class="col-xs-1 col-sm-2"></div></div></div><div class="extendContent"></div><script>var x = document.getElementById("txt_code");var y = document.getElementById("txt_result");function fun_1(){x.value += '1';}function fun_2(){x.value += '2';}function fun_3(){x.value += '3';}function fun_4(){x.value += '4';}function fun_5(){x.value += '5';}function fun_6(){x.value += '6';}function fun_7(){x.value += '7';}function fun_8(){x.value += '8';}function fun_9(){x.value += '9';}function fun_add(){x.value += '+';}function fun_sub(){x.value += '-';}function fun_mul(){x.value += '*';}function fun_div(){x.value += '/';}function fun_0(){x.value += '0';}function fun_00(){x.value += '00';}function fun_dot(){x.value += '.';}function fun_clear(){x.value = '';y.value = '';}</script><script>function ShowResult(data){var y = document.getElementById('txt_result')y.value = data['result']}</script><script>$('#lgbut_compute').click(function(){$.ajax({url:'/compute/',type:'POST',data:{'code':$('#txt_code').val()},dataType:'json',success:ShowResult})})</script></body></html>

2.在css文件夾中創建一個style.css文件并填入以下內容:

body{background-image:url("../img/bg.jpg");background-position:center 0;background-repeat: no-repeat;background-attachment: fixed;background-size: cover;-webkit-background-size:cover;-o-background-size:cover;-moz-background-size:cover;-ms-background-size:cover;}.input_show{margin-top:35px;max-width:280px;height:35px;
}.btn_num{margin:1px 1px 1px 1px;width:60px;
}.btn_clear{margin-left:40px;margin-right:20px;
}.extendContent{height:300px;
}

8

后端代碼

1.配置視圖處理函數,編輯views.py文件,填入以下代碼:

from django.shortcuts import render
import subprocess
from django.views.decorators.http import require_POST
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
import warningswarnings.filterwarnings('ignore')# Create your views here.
def home(request):return render(request, 'index.html')def run_code(code):try:code = 'print(' + code + ')'output = subprocess.check_output(['python', '-c', code],universal_newlines=True,stderr=subprocess.STDOUT,timeout=30)except subprocess.CalledProcessError as e:output = '公式輸入有誤'return output@csrf_exempt
@require_POST
def compute(request):code = request.POST.get('code')result = run_code(code)return JsonResponse(data={'result':result})

2.配置settings.py文件,找到INSTALLED_APPS字段,將創建的app應用添加進來,代碼如下:

INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','app', #在此處添加應用
]

找到ALLOWED_HOSTS字段并修改,編輯代碼如下:

ALLOWED_HOSTS = ['*',]

3.配置訪問路由,編輯urls.py文件,填入以下代碼:

from django.contrib import admin
from django.urls import path
from app.views import home, computeurlpatterns = [path('admin/', admin.site.urls),path('', home, name='home'),path('compute/', compute, name='compute'),
]

4. 運行項目

在終端切換到manage.py文件所在目錄,輸入以下命令運行項目,然后在瀏覽器中輸入“http://127.0.0.1:8000”查看運行結果

python manage.py runserver

出現以下結果說明運行成功!

在線計算器

注意事項

若計算時遇到問題:

0.01s - Debugger warning: It seems that frozen modules are being used, which may0.00s - make the debugger miss breakpoints. Please pass-Xfrozen_modules=off0.00s - to python to disable frozen modules.0.00s - Note: Debugging will proceed. Set PYDEVD_DISABLE_FILE_VALIDATION=1 to disable this validation.

可以嘗試在啟動 Django 服務時添加 --noreload 參數來解決這個問題。如下所示:

python manage.py runserver --noreload

這個問題是由于 Django 的自動重載機制導致的,自動重載機制會導致 Python 解釋器重新加載模塊,從而導致調試器無法正確地識別斷點位置。使用 --noreload 參數可以禁用自動重載機制,并避免這個問題的發生。

寫在后面

我是一只有趣的兔子,感謝你的喜歡!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/162332.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/162332.shtml
英文地址,請注明出處:http://en.pswp.cn/news/162332.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

美國DDoS服務器:如何保護你的網站免遭攻擊?

?  在當今數字化時代&#xff0c;互聯網已經成為人們生活中不可或缺的一部分。隨著互聯網的普及和發展&#xff0c;網絡安全問題也日益嚴重。其中&#xff0c;DDoS攻擊是目前最常見和具有破壞性的網絡攻擊之一。那么&#xff0c;如何保護你的網站免遭DDoS攻擊呢?下面將介紹…

C#開發的OpenRA游戲之屬性Selectable(9)

C#開發的OpenRA游戲之屬性Selectable(9) 在游戲里,一個物品是否具有選中的能力,是通過添加屬性Selectable來實現的。當一個物品不能被用戶選取,那么就不要添加這個屬性。 這個屬性定義在下面這段描述里: ^Selectable: Selectable: SelectionDecorations: WithSpriteCon…

CSS畫一條線

<p style"border: 1px solid rgba(0, 0, 0, 0.1);"></p> 效果&#xff1a;

MATLAB中imbothat函數用法

目錄 語法 說明 示例 使用底帽和頂帽濾波增強對比度 imbothat函數的功能是對圖像進行底帽濾波。 語法 J imbothat(I,SE) J imbothat(I,nhood) 說明 J imbothat(I,SE) 使用結構元素 SE 對灰度或二值圖像 I 執行形態學底帽濾波。底帽濾波計算圖像的形態學閉運算&#…

蘋果手機內存滿了怎么清理?這里有你想要的答案!

手機內存不足是一個比較普遍的現象。由于現在手機應用程序的功能越來越強大&#xff0c;所以占用的內存也越來越大。同時用戶會在手機中存儲大量的數據&#xff0c;如照片、視頻、文檔等&#xff0c;這些都會占用大量的手機空間。那么&#xff0c;蘋果手機內存滿了怎么清理&…

C++數組中重復的數字

3. 數組中重復的數字 題目鏈接 牛客網 題目描述 在一個長度為 n 的數組里的所有數字都在 0 到 n-1 的范圍內。數組中某些數字是重復的,但不知道有幾個數字是重復的,也不知道每個數字重復幾次。請找出數組中任意一個重復的數字。 Input: {2, 3, 1, 0, 2, 5}Output: 2解題…

Altium Designer學習筆記10

再次根據圖紙進行布局走線&#xff1a; 這個MT2492 建議的布局走線。 那我這邊應該是盡量按照該圖進行布局&#xff1a; 其中我看到C1的電容的封裝使用的是電感的封裝&#xff0c;需要進行更換處理&#xff1a; 執行Validate Changes和Execute Changes操作&#xff0c;更新&a…

程序員最奔潰的瞬間

身為程序員哪一個瞬間讓你最奔潰&#xff1f; *程序員最奔潰的瞬間&#xff0c; 勇士&#xff1f; or 無知&#xff1f;

Ant Design Pro生產環境部署

Ant Design Pro是通過URL路徑前綴/api訪問后端服務器&#xff0c;因此在nginx配置以下代理即可。 location / {index.html } location /api {proxy_pass: api.mydomain.com }

CSDN文章保存為MD文檔(一)

免責聲明 文章僅做經驗分享用途&#xff0c;利用本文章所提供的信息而造成的任何直接或者間接的后果及損失&#xff0c;均由使用者本人負責&#xff0c;作者不為此承擔任何責任&#xff0c;一旦造成后果請自行承擔&#xff01;&#xff01;&#xff01; import os import re i…

Element中el-table組件右側空白隱藏-滾動條

開發情況&#xff1a; 固定table高度時&#xff0c;出現滾動條&#xff0c;我們希望隱藏滾動條&#xff0c;或修改滾動條樣式&#xff0c;出現table右邊出現15px 的固定留白。 代碼示例 <el-table class"controlTable" header-row-class-name"controlHead…

C語言二十一彈 --打印空心正方形

C語言實現打印空心正方形 思路&#xff1a;觀察圖中空心正方形&#xff0c;可知首行列和尾行列被黑色外框包裹&#xff0c;其它均為空。所以按觀察打印即可。 總代碼 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h>int main() {int n 0;while (scanf("%d&q…

關于數據擺渡 你關心的5個問題都在這兒!

數據擺渡&#xff0c;這個詞語的概念源自于網絡隔離和數據交換的場景和需求。不管是物理隔離、協議隔離、應用隔離還是邏輯隔離&#xff0c;最終目的都是為了保護內部核心數據的安全。而隔離之后&#xff0c;又必然會存在文件交換的需求。 傳統的跨網數據擺渡方式經歷了從人工U…

手把手教你通過CODESYS V3進行PLC編程(二)

教程背景 在上一期教程中&#xff0c;我們已經完成了控制器設備的連接和配置。接下來的教程將繼續以宏集MC-Prime為例&#xff0c;假設控制器已經配置并連接到開發者的PC上&#xff0c;為您演示如何為控制器安裝合適的CODESYS V3版本并創建第一個程序。 一、安裝CODESYS &…

調用飛漿情感評分模型

# 跑模型并保存 import paddlehub as hub # 加載模型 senta hub.Module(name"senta_lstm")# dataframe格式轉為list格式 text articles[標題內容].drop_duplicates().to_list() # 情感評分 results_data senta.sentiment_classify(data{text:text}) results_df p…

解決 requests 庫下載文件問題的技術解析

每次都以為自己即將戰勝bug&#xff0c;這是一場永無休止的游戲。在編程的世界中&#xff0c;bug就像狡猾的敵人&#xff0c;時隱時現&#xff0c;讓人防不勝防。 今天&#xff0c;我要分享的是如何解決requests庫下載文件問題的技術解析。這是一個讓我頭痛已久的bug&#xff0…

FastAPI通過SSE進行流式輸出

服務端推送 在服務器推送技術中&#xff0c;服務器在消息可用后立即主動向客戶端發送消息。其中&#xff0c;有兩種類型的服務器推送&#xff1a;SSE和 WebSocket。 SSE&#xff08;Server-Send Events&#xff09; SSE 是一種在基于瀏覽器的 Web 應用程序中僅從服務器向客戶…

【高級網絡程序設計】Week2-1 Sockets

一、The Basics 1. Sockets 定義An abstraction of a network interface應用 use the Socket API to create connections to remote computers send data(bytes) receive data(bytes) 2. Java network programming the java network libraryimport java.net.*;similar to…

pgsql常用命令總結

pgsql常用命令及相關總結 命令 命令登錄 psql -U postgres -h 127.0.0.1 -p 5432 -d vism查看所有數據庫&#xff1a;\l 進入某一數據庫&#xff1a;\c 數據庫名字 查看數據庫表&#xff1a;\dt 列出某一張表格的結構&#xff1a;\d 表名 查看某個表的所有數據&#xff1a;s…

學習筆記記錄

目錄 windows php一句話木馬 日志清理 DOS命令 查看用戶的SID 最高權限 常見的cmd命令 反彈shell PHPMYadmin mysql注入語句 wmic linux crontab創建隱藏后門 linux日志文件 knockd服務 ssh登錄 ssh隧道 本地轉發 遠程轉發 動態轉發 /proc: Centos 8 更…