当前位置:   article > 正文

Django前后端分离之后端实践2

Django前后端分离之后端实践2

小实践:实现用户登录、注销及ORM管理功能、事务开启小实践

models.py

  1. class Books(models.Model):
  2. id = models.CharField(primary_key=True,max_length=20,verbose_name="图书ID")
  3. name = models.CharField(max_length=20,verbose_name='图书名称')
  4. status = models.BooleanField(default=False,verbose_name='是否出借',blank=True)
  5. class Meta:
  6. db_table = 'books'
  7. verbose_name = '图书表'
  8. def __str__(self):
  9. return self.name
  10. class Record(models.Model):
  11. book = models.ForeignKey('Books',on_delete=models.CASCADE,verbose_name="图书")
  12. name = models.CharField(max_length=20,verbose_name='借书姓名')
  13. s_time = models.DateTimeField(auto_created=True,verbose_name='借书时间',auto_now=True) # auto_created 自动创建当前时间
  14. e_time = models.DateTimeField(auto_created=True,verbose_name='还书时间',auto_now=True) # auto_now 任意一个字段变更都会自动更新时间
  15. state = models.BooleanField(default=False,verbose_name='是否归还',blank=True)
  16. class Meta:
  17. db_table = 'records'
  18. verbose_name = '图书记录'

 urls.py[注意:路由结尾要记得加$符号,负责会匹配其他的视图函数]

  1. from django.contrib import admin
  2. from django.urls import path,re_path,include
  3. from news import views
  4. urlpatterns = [
  5. path('admin/', admin.site.urls),
  6. re_path(r'^news/',include('news.urls')),
  7. re_path(r'logout/$',views.LogoutView.as_view()),
  8. re_path(r'login/$',views.LoginView.as_view()),
  9. re_path(r'book/$',views.BookView.as_view()),
  10. re_path(r'book/hanlde/$',views.RecordView.as_view())
  11. ]

用户登录注销:

  1. from django.http import HttpResponse,JsonResponse
  2. from django.views import View
  3. from django.contrib.auth import authenticate,logout,login
  4. class LogoutView(View):
  5. def get(self,request):
  6. logout(request)
  7. return JsonResponse({'code':200,'message':'已退出登录'},status=200)
  8. class LoginView(View):
  9. def post(self,request):
  10. username = request.POST.get('username')
  11. password = request.POST.get('password')
  12. user = authenticate(request,username=username,password=password)
  13. if user is not None:
  14. login(request,user)
  15. return JsonResponse({'code':200,'message':'登录成功'})
  16. else:
  17. return JsonResponse({'code':400,'message':'登录失败'})

admin.py  可后台查看数据

  1. from .models import Books,Record
  2. class BookAdmin(admin.ModelAdmin):
  3. list_display = ['id','name','status']
  4. class RecordAdmin(admin.ModelAdmin):
  5. list_display = ['id','book','name','s_time','e_time','state']
  6. admin.site.register(Books,BookAdmin)
  7. admin.site.register(Record,RecordAdmin)

 ORM功能的增删改成实现

  1. class BookView(View):
  2. def get(self,request):
  3. if not request.user.is_authenticated:
  4. return JsonResponse({'code':2002,'messages':"认证失败你没有权限访问,请重新登录"})
  5. bs= Books.objects.all()
  6. result = []
  7. for i in bs:
  8. item = dict(id=i.id,name=i.name,status=i.status)
  9. result.append(item)
  10. return JsonResponse({'code':200,'data':result,'message':'ok'},safe=False)
  11. def post(self,request):
  12. pass
  13. import json
  14. # param =request.POST if len(request.POST)> 0 else json.loads(request.body.decode())
  15. id = request.POST.get('id')
  16. name = request.POST.get('name')
  17. try:
  18. Books.objects.create(id=id,name=name)
  19. except Exception as e:
  20. return JsonResponse({'code':2001,'message':'书籍编号已存在,异常:{}'.format(e)},safe=False)
  21. else:
  22. return JsonResponse({'code':1001,'message':'添加成功'},safe=False)
  23. def delete(self,request):
  24. id = request.POST.get('id')
  25. if not id:
  26. return JsonResponse({'code':1001,'message':'删除失败'})
  27. try:
  28. book = Books.objects.get(id=id)
  29. except Exception as e:
  30. return JsonResponse({'code': 1001, 'message': '删除失败:{}'.format(e)})
  31. else:
  32. book.delete()
  33. return JsonResponse({'code': 200, 'message': '删除成功'})

 应用结果:

事务实现:

  1. class RecordView(View):
  2. def get(self, request):
  3. pass
  4. def post(self, request):
  5. book_id = request.POST.get('id')
  6. name = request.POST.get('name')
  7. try:
  8. book = Books.objects.get(id=book_id)
  9. except Exception as e:
  10. return JsonResponse({'code': 2001, 'messages': "{}".format(e)})
  11. if book.status:
  12. return JsonResponse({'code': 2001, 'messages': "该书籍已借书,请确认书籍的状态是否已出借"})
  13. with transaction.atomic():
  14. # update status
  15. book.status = True
  16. book.save()
  17. # add record
  18. Record.objects.create(name=name, book=book)
  19. return JsonResponse({'code': 1000, 'messages': "出借成功"})
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/73810?site
推荐阅读
相关标签
  

闽ICP备14008679号