python代码
创建一个项目
python-admin manage.py startproject
创建一个应用
python manage.py startapp <应用名>
运行到浏览器
python manage.py runserver
将做好的数据表展现在主页面上
from django.contrib import admin
admin.site.register(<数据表名>)
更新项目并产生相应的脚本
python manage.py makemigrations <项目名>
将数据保存到数据库
python manage.py migrate
数据库外键关键代码:ForeignKey,数据库表一对一代码:OneToOneFiled,数据库多对多代码:ManyToManyFiled
创建管理员账户
python manage.py areatesuperuser
获取数据库所有记录(代码里)
变量=<数据库名>.objects.values()
制作销售管理系统,制作功能:url路由,登录,定义数据库,页面数据增删改查
四个app:sales(销售),mgr(管理),tests(测试),common(公共[存放数据库])
在common的models中定义数据库中的数据表,例:
from django.db import models
import datetime
# 客户表
class Customer(models.Model):
# 客户名称
name=models.CharField(max_length=200)
# 电话号码
phonenumber=models.CharField(max_length=20)
# 地址
address=models.CharField(max_length=200)
# 药品表
class Medicine(models.Model):
# 药品名
name=models.CharField(max_length=200)
# 药品编号
sn=models.CharField(max_length=200)
# 描述
desc=models.CharField(max_length=200)
# 订单表
class Order(models.Model):
# 订单名
name=models.CharField(max_length=200,null=True,blank=True)
# 创建日期
create_date=models.DateField(default=datetime.datetime.now)
# 客户 ForeignKey 代表外键, on_delete 指定了 当我们想删除外键指向的主键记录时, 系统的行为
customer=models.ForeignKey(Customer,on_delete=models.PROTECT)
主文件路径路由写法
from django.contrib import admin
from django.urls import path,include #include 代表路由
from django.conf.urls.static import static
urlpatterns = [
path('admin/', admin.site.urls),
path('sales/',include('sales.urls')),
path('api/mgr/',include('mgr.urls')),
] + static("/", document_root="./z_dist") #当与所有路径都不匹配时进入此处查找
sales索引路径
from django.contrib import admin
from django.urls import path
from sales.views import listorders,listcustomer
urlpatterns = [
path('orders/',listorders), #查看所有订单
path('customer/',listcustomer), #查看数据库中客户表
]
mgr索引路径
from django.contrib import admin
from django.urls import path
from mgr import customer
from mgr.sign_in_out import signin,signout
urlpatterns = [
path('customers',customer.dispatcher), #customer.dispatcher:在customer中dispatcher(分发请求),该语句实现数据的增删改查
path('signin',signin), #登录函数
path('signout',signout), #登出函数
]
sales中views中的内容(查看客户数据表中的数据)
from django.shortcuts import render
from django.http import HttpResponse
from common.models import Customer
html_template ='''
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<style>
table {
border-collapse: collapse;
}
th, td {
padding: 8px;
text-align: left;
border-bottom: 1px solid #ddd;
}
</style>
</head>
<body>
<table>
<tr>
<th>id</th>
<th>姓名</th>
<th>电话号码</th>
<th>地址</th>
</tr>
{%for s in customer %}
<tr>
{% for key,value in s.items %}
<td> {{value}} </td>
{% endfor %}
</tr>
{% endfor %}
</table>
</body>
</html>
'''
from django.template import engines
django_engine = engines['django']
template = django_engine.from_string(html_template)
def listorders(request):
return HttpResponse("下面是系统中所有的订单信息")
def listcustomer(request):
# 返回一个QuerySet对象,包含所有的表记录
# 每条表记录都是一个dict对象
# key是字段名,value是字段值
qs=Customer.objects.values()
ph=request.GET.get('phonenumber',None)
if ph:
qs=qs.filter(phonenumber=ph)
# 传入渲染模板需要的参数
rendered = template.render({'customer':qs})
return HttpResponse(rendered)
mgr中views中的内容(实现数据增删改查)
from typing import NewType
from django.http import JsonResponse
import json
from common.models import Customer
def dispatcher(request):
# 将请求参数统一放入request 的 params 属性中,方便后续处理
# GET请求 参数在url中,同过request 对象的 GET属性获取
if request.method == 'GET':
request.params=request.GET
# POST/PUT/DELETE 请求 参数 从 request 对象的 body 属性中获取
elif request.method in ['POST','PUT','DELETE']:
# 根据接口,POST/PUT/DELETE 请求的消息体都是 json格式
request.params = json.loads(request.body)
# 根据不同的action分派给不同的函数进行处理
action = request.params['action']
if action == 'list_customer':
return listcustomer(request)
elif action == 'add_customer':
return addcustomer(request)
elif action == 'modify_customer':
return modifycustomer(request)
elif action == 'del_customer':
return deletecustomer(request)
else:
return JsonResponse({'ret' : 1,'msg':'不支持该类型http请求'})
# def listcustomer(request): 查看全部数据功能
# 返回一个 QuerySet 对象 ,包含所有的表记录
qs = Customer.objects.values()
# 将 QuerySet 对象 转化为 list 类型
# 否则不能 被 转化为 JSON 字符串
retlist = list(qs)
return JsonResponse({'ret': 0, 'retlist': retlist})
def addcustomer(request): #添加数据功能
info=request.params['data']
# 从请求中获取要添加客户的信息
# 并且插入到数据库中
record=Customer.objects.create(name=info['name'],
phonenumber=info['phonenumber'],
address=info['address'])
return JsonResponse({'ret' : 0 , 'id':record.id})
def modifycustomer(request): # 修改数据功能
# 获取需要修改的客户的id
customerid=request.params['id']
newdata=request.params['newdata']
try:
# 根据id从数据库找到相应的客户记录
customer=Customer.objects.get(id=customerid)
except Customer.DoesNotExist:
return {
'ret':1,
'msg': f'id为'+ {customerid} +'的客户不存在'
}
if 'name' in newdata:
customer.name=newdata['name']
if 'phonenumber' in newdata:
customer.phonenumber=newdata['phonenumber']
if 'address' in newdata:
customer.address=newdata['address']
# 将数据保存
customer.save()
return JsonResponse({'ret':0})
def deletecustomer(request): # 删除数据功能
customerid=request.params['id']
try:
customer=Customer.objects.get(id=customerid)
except Customer.DoesNotExist:
return {
'ret':1,
'msg': f'id为'+ {customerid} +'的客户不存在'
}
# 删除数据库
customer.delete()
return JsonResponse({'ret':0})
mgr中sign_in_out中的内容(实现账号登录和退出效果)
from django.http import JsonResponse
from django.contrib.auth import authenticate, login, logout
# 登录处理
def signin( request):
# 从 HTTP POST 请求中获取用户名、密码参数
userName = request.POST.get('username')
passWord = request.POST.get('password')
# 使用 Django auth 库里面的 方法校验用户名、密码
user = authenticate(username=userName, password=passWord)
# 如果能找到用户,并且密码正确
if user is not None:
if user.is_active:
if user.is_superuser:
login(request, user)
# 在session中存入用户类型
request.session['usertype'] = 'mgr'
return JsonResponse({'ret': 0})
else:
return JsonResponse({'ret': 1, 'msg': '请使用管理员账户登录'})
else:
return JsonResponse({'ret': 0, 'msg': '用户已经被禁用'})
# 否则就是用户名、密码有误
else:
return JsonResponse({'ret': 1, 'msg': '用户名或者密码错误'})
# 登出处理
def signout( request):
# 使用登出方法
logout(request)
return JsonResponse({'ret': 0})
# 登出处理
def signout( request):
# 使用登出方法
logout(request)
return JsonResponse({'ret': 0})