网站开发

394 阅读4分钟

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})