django生鲜系统卖家后端代码
1.首页
#卖家主路由
from django.urls import path,include
from seller import urls as seller_urls
path('', index),
#卖家子路由
#卖家注册
path('register_seller/',Register_seller.as_view()),
#卖家登录
path('login_seller/',Login_seller.as_view()),
#卖家管理后台首页
path('index_seller/',index),
#退出
path('quit_login/',Quit_login.as_view()),
#商品类型列表
path('type_list/',Type_list),
#添加商品类型
path('type_add/',Type_add),
#删除商品类型
path('type_delete/',Type_Delete),
#商品类型修改编辑
path('type_change/',Type_Change),
#商品列表
path('goods_list/',Goods_List),
#商品添加
path('goods_add/',Goods_Add),
#商品删除
path('goods_delete/',Goods_Delete),
#商品修改编辑
path('goods_change/',Goods_change),
2.数据库迁移和写入
#models写入数据库
#卖家表
class Seller(models.Model):
user = models.CharField(max_length=128,null=False,blank=False,verbose_name='卖家用户名')
nickname = models.CharField(max_length=128,null=False,blank=False,verbose_name='卖家昵称')
password = models.CharField(max_length=128,null=False,blank=False,verbose_name='卖家密码')
createtime = models.DateTimeField(verbose_name='卖家创建时间',auto_now_add=True)
3.视图
导入数据库的模块
from seller.models import Goods
from django.shortcuts import render, redirect
from django.views import View
#加密
from django.contrib.auth.hashers import make_password, check_password
from seller import models
import datetime
#装饰器
from shop.settings import UPLOADFILES_DIRS
4.装饰器
def decorator(func):
def inner(request,*args,**kwargs):
user = request.session.get('seller_user_session')
id = request.session.get('seller_id_session')
nickname = request.session.get('seller_nickname_session')
if user and id and nickname:
return func(request,*args,**kwargs)
else:
return redirect('/seller/login_seller/')
return inner
5.卖家注册
class Register_seller(View):
def get(self,request):
return render(request,'seller/register.html')
def post(self,request):
user = request.POST.get('user')
password1 = request.POST.get('password1')
password2 = request.POST.get('password2')
nickname = request.POST.get('nickname')
#判断卖家用户是否注册,信息是否为空,密码是否一致,登录成功,将信息存入数据库
if user=='' or nickname=='' or password1=='' or password2 =='':
error_msg='用户信息不能为空'
return render(request, 'seller/register.html',locals())
is_seller = models.Seller.objects.filter(user=user).first()
if is_seller:
error_msg='用户已注册'
return render(request,'seller/login.html',locals())
if password1 != password2:
error_msg='密码不一致'
return render(request, 'seller/register.html',locals())
models.Seller.objects.create(user=user,nickname=nickname,password=make_password(password1)).save()
succeed_msg='注册成功'
return render(request,'seller/login.html',locals())
6.卖家登录
class Login_seller(View):
def get(self,request):
return render(request,'seller/login.html')
def post(self,request):
error_msg=''
succeed_msg=''
user = request.POST.get('user')
password = request.POST.get('password')
if user=='' or password=='':
error_msg = '用户信息不能为空'
return render(request,'seller/login.html',locals())
is_seller = models.Seller.objects.filter(user=user).first()
if not is_seller:
error_msg = '用户未注册'
return render(request,'seller/login.html',locals())
if not check_password(password,is_seller.password) :
error_msg='密码不正确'
return render(request,'seller/login.html',locals())
#登录成功了
request.session['seller_id_session'] = is_seller.id
request.session['seller_user_session'] = is_seller.user
request.session['seller_nickname_session'] = is_seller.nickname
return redirect('/seller/index_seller/')
7.卖家管理后台首页
@decorator
def index(request):
if request.method =='GET':
ip = request.META.get('REMOTE_ADDR')
now_time = datetime.datetime.now()
#版本
ver = '1.0.0'
#服务器地址
ip = ip
#winnt
WINNT = 'WINNT'
#django版本号
django = '3.0.3'
return render(request,'seller/index.html',locals())
8.退出
class Quit_login(View):
def get(self,request):
request.session.flush()
return redirect('/seller/login_seller/')
9.商品类型列表
@decorator
def Type_list(request):
if request.method=='GET':
#获取商品信息
type_obj_list = models.Types.objects.all()
#将数据放到页面上
return render(request,'seller/type_list.html',locals())
10.添加商品类型
@decorator
def Type_add(request):
if request.method=='GET':
return render(request,'seller/type_add.html')
if request.method=='POST':
#对信息进行提示
error_msg = ''
succeed_msg = ''
type_name = request.POST.get('type_name')
#判断填入信息不能为空;判断类型是否存在,写入数据库
if type_name == '':
error_msg ='信息不能为空'
return render(request,'seller/type_add.html',locals())
is_type = models.Types.objects.filter(type = type_name).first()
if is_type:
error_msg='类型已存在'
return render(request, 'seller/type_add.html', locals())
models.Types.objects.create(type = type_name).save()
return redirect('/seller/type_list/')
11.删除商品类型
@decorator
def Type_Delete(request):
if request.method=='GET':
#类型ID
id = request.GET.get('id')
#根据类型id,删除相应的商品类型
models.Types.objects.filter(id=int(id)).delete()
return redirect('/seller/type_list')
12.商品类型修改编辑
@decorator
def Type_Change(request):
if request.method=='GET':
#根据id 查出想用的商品类型
id = request.GET.get('id')
type_obj = models.Types.objects.filter(id=int(id)).first()
return render(request,'seller/type_change.html',locals())
if request.method == 'POST':
#类型id type_name 类型名称
#判断填写的信息不为空;判断类型不能重复;修改成功,写入数据库
id =request.POST.get('id')
type_name =request.POST.get('type_name')
#对信息进行提示
error_msg = ''
succeed_msg = ''
if id =='' or type_name == '':
error_msg = '参数错误'
return render(request, 'seller/type_change.html', locals())
is_type = models.Types.objects.filter(type=type_name).first()
if is_type:
error_msg = '类型已存在'
return render(request, 'seller/type_add.html', locals())
models.Types.objects.filter(id=int(id)).update(type=type_name)
return redirect('/seller/type_list/')
13.商品列表
@decorator
def Goods_List(request):
if request.method == 'GET':
goods_obj_list = models.Goods.objects.all()
return render(request,'seller/goods_list.html',locals())
14.商品添加
@decorator
def Goods_Add(request):
if request.method=='GET':
#查询
type_obj_list = models.Types.objects.all()
return render(request,'seller/goods_add.html',locals())
if request.method=='POST':
# 对信息进行提示
error_msg = ''
succeed_msg = ''
#商品编号
goods_num = request.POST.get('goods_num')
#相片名称
goods_name = request.POST.get('goods_name')
#商品原价
goods_oprice = request.POST.get('goods_oprice')
#商品现价
goods_xprice = request.POST.get('goods_xprice')
#商品库存
goods_count = request.POST.get('goods_count')
#商品描述
goods_description = request.POST.get('goods_description')
#商品类型
goods_type = request.POST.get('goods_type')
#商品详情
goods_content = request.POST.get('goods_content')
#商品缩略图
goods_img = request.FILES.get('userfiles')
#卖家发布
seller = request.session['seller_id_session']
#判断商品编号是否存在,保存缩略图,存入数据库
is_goods = models.Goods.objects.filter(goods_num=goods_num).first()
if is_goods:
error_msg='商品已存在'
return render(request,'seller/goods_add.html',locals())
path_url = os.path.join(UPLOADFILES_DIRS[0],goods_img.name)
with open(path_url,'wb') as f:
for i in goods_img.chunks():
f.write(i)
f.close()
goods_img_url = '/static/upload/'+ goods_img.name
models.Goods.objects.create(
goods_num=goods_num,
goods_name=goods_name,
goods_oprice=goods_oprice,
goods_xprice=goods_xprice,
goods_count=goods_count,
goods_desc=goods_description,
type_id=int(goods_type),
goods_detail=goods_content,
seller_id=int(seller),
goods_img=goods_img_url
).save()
return redirect('/seller/goods_list/')
15.商品删除
@decorator
def Goods_Delete(request):
if request.method=='GET':
id = request.GET.get('id')
models.Goods.objects.filter(id=int(id)).delete()
return redirect('/seller/goods_list/')
16.商品修改编辑
@decorator
def Goods_change(request):
if request.method=='GET':
#?id= 商品id
id=request.GET.get('id')
type_obj_list = models.Types.objects.all()
goods_obj = models.Goods.objects.filter(id=int(id)).first()
return render(request,'seller/goods_change.html',locals())
if request.method=='POST':
# 对信息进行提示
error_msg = ''
succeed_msg = ''
#商品id
id=request.POST.get('id')
# 商品编号
goods_num = request.POST.get('goods_num')
# 相片名称
goods_name = request.POST.get('goods_name')
# 商品原价
goods_oprice = request.POST.get('goods_oprice')
# 商品现价
goods_xprice = request.POST.get('goods_xprice')
# 商品库存
goods_count = request.POST.get('goods_count')
# 商品描述
goods_description = request.POST.get('goods_description')
# 商品类型
goods_type = request.POST.get('goods_type')
# 商品详情
goods_content = request.POST.get('goods_content')
# 商品缩略图
goods_img = request.FILES.get('userfiles')
# 卖家发布
seller = request.session['seller_id_session']
# 保存缩略图,存入数据库
path_url = os.path.join(UPLOADFILES_DIRS[0], goods_img.name)
#写入图片
with open(path_url, 'wb') as f:
for i in goods_img.chunks():
f.write(i)
f.close()
goods_img_url = '/static/upload/' + goods_img.name
#数据库查询
models.Goods.objects.filter(id=int(id)).update(
goods_num=goods_num,
goods_name=goods_name,
goods_oprice=goods_oprice,
goods_xprice=goods_xprice,
goods_count=goods_count,
goods_desc=goods_description,
type_id=int(goods_type),
goods_detail=goods_content,
seller_id=int(seller),
goods_img=goods_img_url
)
#重定向
return redirect('/seller/goods_list/')
注意:数据库命名要与后端定义名字一致,每次改变数据库中内容是都需要重新写入和迁移