django前后端分离创建用户接口(用Django设计简易订单附件管理系统-3)
django前后端分离创建用户接口(用Django设计简易订单附件管理系统-3)点击增加,为订单附件管理表添加一个文件,此时看到的就是fields里的字段:重新运行服务,访问127.0.0.1:8000/admin/,登录后就能看到以下界面了此时里面啥都没有,稍后我们进行admin.py的配置。通过在attachMana目录下的admin.py中添加如下代码:from django.contrib import admin from .models import AttachModel class AttachModelAdmin(admin.ModelAdmin): list_display = ('orderNumber' 'custId' 'fileName' 'owner' 'create_time') fields = ('orderNumber' '
9、创建超级用户在与manage.py同级,运行如下命令:
python manage.py createsuperuser
然后输入用户名,密码
然后重新启动服务,访问127.0.0.1:8000/admin/,出现django后台管理登录界面
输入刚才创建的用户名及密码后进行登录
此时里面啥都没有,稍后我们进行admin.py的配置。
10、配置admin.py通过在attachMana目录下的admin.py中添加如下代码:
from django.contrib import admin
from .models import AttachModel
class AttachModelAdmin(admin.ModelAdmin):
list_display = ('orderNumber' 'custId' 'fileName' 'owner' 'create_time')
fields = ('orderNumber' 'custId' 'fileObj')
admin.site.register(AttachModel AttachModelAdmin)
其中list_sisplay是元组或列表,是订单附件管理表中能看到的字段,而fields则是在添加数据时显示的字段。
重新运行服务,访问127.0.0.1:8000/admin/,登录后就能看到以下界面了
点击增加,为订单附件管理表添加一个文件,此时看到的就是fields里的字段:
随便添加了一个文件并保存,在项目的upload/2020/09/11/目录里就有了刚上传的文件。
但在管理界面中发现没有文件名及上传者,接下来我们需要修改admin.py
为admin.py添加一个save_model方法:
def save_model(self request obj form change):
obj.owner = request.user
obj.fileName = request.FILES['fileObj'].name
return super(AttachModelAdmin self).save_model(request obj form change)
这样在更新前就会得到当前用户名与文件名。
如果在admin后台将数据删除,只是删除掉表格中的数据,文件并不会删除。
11、编制index.html,使访问127.0.0.1:8000时就路由到index.html首先在template目录下创建一个index.html文件:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>订单附件查询</title>
</head>
<body>
这是index.html的内容
</body>
</html>
urls.py维持原来的不变。
改变views.py的代码为:
class Index(View):
def get(self request):
return render(request 'index.html' context={})
接着还需要修改settings.py中的关于模板的设置:
TEMPLATES
'DIRS': [os.path.join(BASE_DIR 'template')]
重启服务后,再次访问127.0.0.1:8000,将是index.html的内容,而非原来的HttpResponse的内容。
12、编制index.html界面
界面分上下两部分,上面是一个表单,用来输入要搜索的条件,下面是表格,用来展示数据,由于不擅长前端,并且是公司内部使用,也就没去搞美化了,只在网上去找了个通用的表格样式。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>订单附件查询</title>
<link rel="stylesheet" href="/static/css/table.css">
</head>
<body>
<form action="search/" method="post">
订单号:<input type="text" name="orderNumber">
顾客编号:<input type="text" name="custId">
文件名:<input type="text" name="fileName">
<input type="checkbox" name="onDate">
从 <input type="date" name="startDate">
到 <input type="date" name="endDate">
<input type="submit" value="查询">
</form>
<hr>
<table class="data-table">
<tr><th>订单号</th><th>顾客编号</th><th>文件名</th><th>上传者</th><th>上传日期</th><th>操作</th></tr>
{% for row_data in datas %}
<tr>
<td>{{ row_data.orderNumber }}</td>
<td>{{ row_data.custId }}</td>
<td>{{ row_data.fileName }}</td>
<td>{{ row_data.owner }}</td>
<td>{{ create_time }}</td>
<td>下载</td>
</tr>
{% endfor %}
</table>
</body>
</html>
界面如下:
13、编制查询功能在urls.py中添加新的路由:
path('search/' views.Search.as_view() name='search')
在views.py中添加如下代码:
class Search(View):
def post(self request):
return render(request 'index.html' context={})
我们重启服务,看看点击查询按钮会不会出错,如果不出错,那再接着编写Search的代码。
结果出现了CSRF验证失败。
在index.html的from中间添加如下代码:
{% csrf_token %}
再次点击查询按钮时,网页可正常跳转,并未出错。不过我再次点击查询时就出现错误了,url会变为127.0.0.1:8000/search/search/,我们修改form中的action,由原来的”search/”改为”/search/”然后就正常了。
通畅以后,我们就可以编写search代码了。
from attachMana.models import AttachModel
class Search(View):
def post(self request):
params = {}
params['orderNumber'] = request.POST.get('orderNumber')
params['custId'] = request.POST.get('custId')
params['fileName'] = request.POST.get('fileName')
params['onDate'] = request.POST.get('onDate')
params['startDate'] = request.POST.get('startDate')
params['endDate'] = request.POST.get('endDate')
if params['onDate']:
# 如果有勾选日期前面的checkbox,表示启用日期查询
datas = AttachModel.objects.filter(orderNumber__contains=params['orderNumber']).filter(orderNumber__contains=params['custId']).filter(orderNumber__contains=params['fileName']).filter(create_time__range=(params['startDate'] params['endDate']))[:100]
else:
datas = AttachModel.objects.filter(orderNumber__contains=params['orderNumber']).filter(orderNumber__contains=params['custId']).filter(orderNumber__contains=params['fileName'])[:100]
return render(request 'index.html' context={'datas':datas})
由于对提交的post数据验证还不熟悉,所以暂未设计验证。
重启服务后,现在点击查询就能搜索出数据并且放置到前端页面的表格中了。