学校简单充值和查询后勤项目(Django)
最终效果:
一些所需的代码!
注意:创建项目和创建应用要按本人照顾页面的第一章笔记进行创建
settings.py
连接数据库
DATABASES = {
'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
'ENGINE': 'django.db.backends.mysql',
'NAME':"test",
'HOST':"127.0.0.1",
'POST':"3306",
'USER':"root",
'PASSWORD':"123456",
}
}
models.py
from django.db import models
# Create your models here.
class deptinfo(models.Model):
class Meta:
db_table="deptinfo" #描述原数据的内部类
id=models.AutoField(primary_key=True,db_column="id")
deptname = models.CharField(max_length=20)
def __str__(self):#魔法函数,用于打印对象时,显示对象中的某个信息
return self.deptname
class cardinfo(models.Model):
class Meta:
db_table="cardinfo"
id=models.AutoField(primary_key=True,db_column="id")
cardno=models.CharField(max_length=8)
balance=models.FloatField()
state=models.IntegerField()
deptid=models.ForeignKey(deptinfo,on_delete=models.CASCADE,db_column="deptid")
def __str__(self):
return self.cardno
views.py
from django.shortcuts import render
from django.http import HttpResponse
from django.contrib import messages
from . models import *
# 视图函数
# Create your views here.
def index(request):
if request.method=="POST":
cardno=request.POST.get("cardno")#cardno是文本框的name属性
result=cardinfo.objects.filter(cardno=cardno)
if result:
print(result) #queryset 是返回多个对象的类似于列表的对象
card=result[0] #card是cardinfo的对象
print(card.balance)
return render(request,"index.html",{"balance":card.balance,#将余额传递给页面
"cardno":card.cardno, #将卡号传递给页面
"info":card.deptid.deptname+"系部的卡号查询成功"})
else:#根据卡号没有查询到任何数据
messages.info(request,"该号不存在!")#在试图函数中存消息,在html页面中取出消息
return render(request, "index.html")
def addbalance(request):
#获取卡号 ,获取金额
cardno=request.POST.get("cardno")
amount = request.POST.get("amount")#通过get获取的数据默认是str类型
#根据卡号获取该卡的余额
result=cardinfo.objects.filter(cardno=cardno)
if result:
card=result.first()#card是cardinfo的对象
card.balance=card.balance+int(amount)#将余额+充值的金额
card.save()#保存到数据库
#给用户提示,充值成功
return render(request,"index.html",{"info2":"充值成功"})
else:
return render(request,"index.html",{"info2":"该卡号不存在"})
def app(request):
depts=deptinfo.objects.all()
print(depts)
if request.method=="POST":
cardno = request.POST.get("cardno")
balance = request.POST.get("balance")
deptid = request.POST.get("dept")
#根据院部id查询该deptinfo的对象
dept=deptinfo.objects.get(id=deptid)
newcard=cardinfo(cardno=cardno,balance=balance,state=1,deptid=dept)
newcard.save()
return render(request, "application.html", {"depts": depts})
应用的urls.py
from django.contrib import admin
from django.urls import path
from . import views
urlpatterns = [
path('', views.index),#将站点的/与index相绑定
path('addbalance', views.addbalance)
path('app', views.app)
]
项目的urls.py
from django.contrib import admin
from django.urls import path,include
urlpatterns = [
path('admin/', admin.site.urls),
path('',include("Books.urls")),
]
base.html
父模板
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h3>欢迎进入襄阳职业技术学院后勤服务网</h3>
<img src="/static/img/xz1.png"/><br/>
<a href="">申请饭卡</a> | <a href="/">充值服务</a>
<hr/>
{% block content %}
{% endblock %}
</body>
</html>
index.html
{% extends "base.html" %}
{% block content %}
<div>
<form action="/" onsubmit="return check();"method="post">
<input type="hidden" name="csrfmiddlewaretoken" value="{{ csrf_token }}">
<p>卡号:<input type="text" name="cardno" id="cardno" value="{{ cardno }}"/></p>
<p>余额:<input type="text" name="balance" disabled value="{{ balance }}"/> </p>
<input type="submit" value="查询"/>
</form>
</div>
{# 显示xxx系部卡号查询成功#}
<span style="color: red; font-size: 12px">{{ info }}</span>
<div>
<form action="/addbalance" onsubmit="return checks();" method="post">
<input type="hidden" name="csrfmiddlewaretoken" value="{{ csrf_token }}">
<input type="hidden" name="cardno" id="cardno" value="{{ cardno }}"/>
<p>金额:<input type="text" name="amount" id="amount" /></p>
<input type="submit" value="充值"/>
</form>
</div>
{# 显示金额充值成功#}
<span style="color: red; font-size: 12px">{{ info2 }}</span>
{# 判断消息列表中是否有消息#}
{% if messages %}
<script>
{# 从列表中循环遍历#}
{% for msg in messages %}
{# 借助js弹出消息#}
alert('{{ msg }}')
{% endfor %}
</script>
{% endif %}
<script>
function check() {
var cardno=document.getElementById("cardno").value
if (cardno==""){
alert("请输入卡号")
return false
}
return true
}
function checks() {
var amount=document.getElementById("amount").value
if (amount == ""){
alert("请输入金额")
return false
}
return true
}
</script>
{% endblock %}
application.html
{% extends "base.html" %}
{% block content %}
<form action="/app" onsubmit="return check()"method="post">
<h2>襄阳职业技术学院饭卡申请</h2>
<input type="hidden" name="csrfmiddlewaretoken" value="{{ csrf_token }}">
注册卡号:<input type="text" name="cardno" id="cardno" /><br/>
初始余额:<input type="text" name="balance" id="balance" /><br/>
选择系别:
<select name="dept" id="dept">
{% for dept in depts %}
<option value="{{ dept.id }}">{{ dept.deptname }}</option>
{% endfor %}
</select><br/>
<input type="submit" value="确定添加"/>
</form>
<script>
function check() {
var cardno=document.getElementById("cardno").value
var balance=document.getElementById("balance").value
if (cardno.trim()==""||balance.trim()=="") {
alert("请输入卡号或余额")
return false
}
return true
}
</script>
{% endblock %}