def put(self, request): '''编辑新闻分类''' json_data = request.body.decode('utf-8') data = json.loads(json_data) forms = EditNewCoregoryForm(data) if forms.is_valid(): pk = forms.cleaned_data.get('pk') name = forms.cleaned_data.get('name') name = name.strip() if not name: return ToJsonData().paramserr('请输入内容') tag = Tag.objects.filter(name=name).exists() if tag: return ToJsonData().paramserr('该分类已存在') try: # Tag.objects.filter(pk=pk).update(name=name) tag = Tag.objects.filter(pk=pk).first() tag.name = name tag.save(update_fields=['name']) return ToJsonData().ok(message='修改成功') except Exception as f: return ToJsonData().paramserr(message='分类不存在') else: errors = forms.get_errors() return ToJsonData().paramserr(message=errors)
def register(request): '''注册用户''' if request.method == 'GET': return render(request, 'users/register.html') if request.method == 'POST': try: json_data = request.body data = json.loads(json_data) except Exception as e: logger.error('参数传递出现错误,json.loads无法解析') return ToJsonData().paramserr(message='参数错误') forms = RegisterForm(data) if forms.is_valid(): username = forms.cleaned_data.get('username') password = forms.cleaned_data.get('password') mobile = forms.cleaned_data.get('mobile') user = MyUser.objects.create_user(mobile=mobile, username=username, password=password) # 注册成功直接登陆 login(request, user) return ToJsonData().ok('注册成功') else: error = forms.get_errors() return ToJsonData().paramserr(message=error)
def put(self, request, news_id): json_data = request.body.decode('utf-8') data = json.loads(json_data) forms = EditNewsForm(data) if forms.is_valid(): title = forms.cleaned_data.get('title') content = forms.cleaned_data.get('content') digest = forms.cleaned_data.get('digest') image_url = forms.cleaned_data.get('image_url') tag = forms.cleaned_data.get('tag') news = News.objects.filter(is_delete=False, pk=news_id).first() news.title = title news.content = content news.digest = digest news.image_url = image_url news.tag = tag news.save(update_fields=[ 'title', 'content', 'digest', 'image_url', 'tag_id', ]) return ToJsonData().ok() else: errors = forms.get_errors() return ToJsonData().paramserr(message=errors)
def parentComment(request): '''添加子评论视图''' if not request.user.is_authenticated: return ToJsonData().paramserr('请登录') try: comment_id = int(request.POST.get('comment_id')) content = request.POST.get('content') if not content: return ToJsonData().paramserr('请输入内容') except: logger.error('获取父评论时出错') raise Http404('页面未找到') try: # 获取父评论 parents = Comment.objects.get(pk=comment_id) except: logger.error('评论不存在的评论') return ToJsonData().paramserr('该评论不存在') author = request.user # 新增评论 comment = Comment.objects.create(author=author, news_id=parents.news_id, content=content) # 添加评论的评论 comment.parents = parents comment.save() data = { 'content': content, 'author': author.username, 'create_time': comment.update_time } return ToJsonData().ok(data=data)
def delete(self, request, course_id): course = Course.objects.filter(is_delete=False, pk=course_id).first() if course_id: course.is_delete = True course.save(update_fields=['is_delete']) return ToJsonData().ok('删除成功') else: return ToJsonData().paramserr('课程不存在')
def post(self, request): json_data = request.body.decode('utf-8') data = json.loads(json_data) forms = CourseForm(data) if forms.is_valid(): forms.save() return ToJsonData().ok('保存成功') else: error = forms.get_errors() return ToJsonData().paramserr(error)
def post(self, request): forms = BannerForm(request.POST) if forms.is_valid(): banner = forms.save(commit=False) banner.news = forms.cleaned_data.get('news_id') banner.save() return ToJsonData().ok(message='保存成功') else: error = forms.get_errors() return ToJsonData().paramserr(message=error)
def post(self, request): # 1,获取参数 try: json_data = request.body.decode() data = json.loads(json_data) except Exception as e: logger.error('参数传递出现错误,json.loads无法解析') return ToJsonData().paramserr(message='参数错误') form = smsCodeForms(data=data) # 2,校检参数 if form.is_valid(): # 3,获取手机号码 mobile = form.cleaned_data.get('mobile') # 4,产生随机验证码 code = ''.join([ random.choice(string.digits) for _ in range(constants.SMS_LENGTH) ]) # 写算法随机 # 5,获取redis数据库连接 try: redis_con = get_redis_connection(alias='verification') # 连接数据库 logger.info('{}短信验证码发送成功'.format(mobile)) # 7,将短信验证码存入数据库 sms_key = 'sms_{}'.format(mobile) sms_flag_key = 'sms_flag_{}'.format(mobile) # 创建管道,执行多条写入命令 pipe = redis_con.pipeline() except: logger.error('获取redis连接时出错') return ToJsonData().servererr(message='未知错误') # 6,发送短信验证码 '''开发阶段不用正式的短信,已测试成功可用''' # send_sms_code.delay(mobile,code) #调用异步任务,存入异步redis队列 # res = send_sms(mobile, code=code).decode() # result = json.loads(res) # # 判断验证码是否发送成功 # if result['Message'].lower() != 'ok': # logger.error('{}短信验证码超额'.format(mobile)) # return ToJsonData().paramserr(message='验证码数量已超额') try: pipe.setex(sms_key, constants.SMS_CODE_EXPIRY, code) # 保存发送短信标记 pipe.setex(sms_flag_key, constants.SMS_FLAG_EXPIRY, 1) # 执行管道内的命令 pipe.execute() logger.info('验证码保存成功:{}'.format(code)) except Exception as e: logger.debug('保存短信验证码时出现异常,{}'.format(e)) return ToJsonData().servererr(message='服务器异常', data={}) # 8,返回发送成功结果 return ToJsonData().ok(message='发送成功', data={}) else: errors = form.get_errors() return ToJsonData().paramserr(message=errors)
def post(self, request): '''添加新闻分类''' name = request.POST.get('name', None) if not name or not name.strip(): return ToJsonData().paramserr('请填写内容') name = name.strip() exist = Tag.objects.filter(name=name, is_delete=False).exists() if exist: return ToJsonData().paramserr(message='该分类已存在') else: Tag.objects.create(name=name) return ToJsonData().ok(message='创建成功')
def post(self, request): json_data = request.body.decode('utf-8') data = json.loads(json_data) forms = AddNewsForm(data) if forms.is_valid(): news = forms.save(commit=False) # commit 为True直接提交保存 news.author_id = request.user.id news.save() return ToJsonData().ok('添加成功') else: errors = forms.get_errors() return ToJsonData().paramserr(errors)
def put(self, request, course_id): course = Course.objects.filter(is_delete=False, pk=course_id) if course: json_data = request.body.decode('utf-8') data = json.loads(json_data) forms = CourseForm(data) if forms.is_valid(): course.update(**forms.cleaned_data) return ToJsonData().ok('修改成功') else: error = forms.get_errors() return ToJsonData().paramserr(error) else: return ToJsonData().paramserr('课程不存在')
def news(request): # 1,获取分类和页码,并校检 try: tag_id = int(request.GET.get('tag_id', 0)) except: logger.error('没有传递有效的分类id') tag_id = 0 try: page = int(request.GET.get('page', 1)) except: logger.error('没有传递有效的页码数值') page = 1 # 分析前端页面需要哪些数据,针对性查找,优化sql newses_queryset = News.objects.filter(is_delete=False).select_related('author', 'tag'). \ only('title', 'tag__name', 'author__username', 'create_time', 'digest', 'image_url') # 判断分类id是否存在,不存在则获取全部 news = newses_queryset.filter(tag_id=tag_id) or newses_queryset.all() # 分页 paginator = Paginator(news, constants.PAGE_NUM) # 获取当前页数 try: cur_p_news = paginator.page(page) except EmptyPage as e: logger.error('页码超过最大页数') # 返回最后一页 cur_p_news = paginator.page(paginator.num_pages) ser = NewsSerialize(instance=cur_p_news.object_list, many=ToJsonData) data = { 'total_page': paginator.num_pages, 'newses': ser.data # 可以序列化分页结果 } return ToJsonData().ok(data=data)
def get(self, request): news_id = request.GET.get('news_id', None) tags = Tag.objects.filter(is_delete=False).only('name') if news_id: news = News.objects.filter(is_delete=False, pk=news_id).defer('update_time', 'create_time', ).first() if not news: return ToJsonData().paramserr('分类不存在') return render(request, 'cms/writenews.html', locals()) else: return render(request, 'cms/writenews.html', locals())
def up_thumbnail(request): # 上传到本地 # file = request.FILES.get('file') # # FDFS_client = Fdfs_client('/home/pyvip/tanzhou/utils/fastdfs/storage/client.conf') # Fdfs_client.append_by_buffer(file) # try: # file_path = os.path.join(MEDIA_ROOT, file.name) # with open(file_path, 'wb') as fp: # for chunk in file.chunks(): # fp.write(chunk) # except AttributeError as f: # pass # url = request.build_absolute_uri(MEDIA_URL + file.name) # return ToJsonData().ok(message='上传成功', data={'url': url}) image_file = request.FILES.get('file') # 记得这个不要写错啦 if not image_file: logger.info('从前端获取图片失败') return JsonResponse({'code': 500, 'message': '从前端获取图片失败'}) if image_file.content_type not in ('image/jpeg', 'image/png', 'image/gif'): return JsonResponse({'code': 500, 'message': '不能上传非图片文件'}) try: # jpg image_ext_name = image_file.name.split('.')[-1] # 切割后返回列表取最后一个元素尾缀 except Exception as e: logger.info('图片拓展名异常:{}'.format(e)) image_ext_name = 'jpg' try: img = image_file.read() upload_res = FDFS_Client.upload_by_buffer(img, file_ext_name=image_ext_name) except Exception as e: logger.error('图片上传出现异常:{}'.format(e)) return ToJsonData().servererr(message='上传图片异常') else: if upload_res.get('Status') != 'Upload successed.': logger.info('图片上传到FastDFS服务器失败') return ToJsonData().paramserr(message='上传图片失败') else: image_name = upload_res.get('Remote file_id') image_url = settings.FASTDFS_SERVER_DOMAIN + image_name return ToJsonData().ok(message='上传成功', data={'url': image_url})
def put(self, request, banner_id): json_data = request.body.decode('utf-8') data = json.loads(json_data) forms = BannerForm(data) if forms.is_valid(): image_url = forms.cleaned_data.get('image_url') news_id = forms.cleaned_data.get('news_id') priority = forms.cleaned_data.get('priority') try: banner = Banner.objects.filter(is_delete=False, pk=banner_id).first() banner.image_url = image_url banner.news_id = news_id banner.priority = priority banner.save() except Exception as e: logger.error('获取轮播图失败:{}'.format(e)) return ToJsonData().ok('修改成功', data={'priority': priority}) else: error = forms.get_errors() return ToJsonData().paramserr(message=error)
def login_view(request): '''登录视图''' if request.method == 'POST': # 1,获取数据 forms = LoginForm(request.POST) # 2,验证数据 if forms.is_valid(): mobile = forms.cleaned_data.get('mobile') password = forms.cleaned_data.get('password') remember = forms.cleaned_data.get('remember') # 3,验证用户 user = authenticate(request, username=mobile, password=password) # 4,验证用户是否存在 if user: # 5,验证用户是否活跃 if user.is_active: # 6,登录,保存session login(request, user) # 7,是否记住该用户 if remember: # 8,设置session过期时间 request.session.set_expiry(None) # 9,返回登陆成功 return ToJsonData().ok(message='登录成功') else: request.session.set_expiry(0) return ToJsonData().ok(message='登陆成功') else: # 10,返回用户不活跃信息 return ToJsonData().unauth(message='该用户已被冻结', data={}) else: # 11,返回校检用户失败信息 return ToJsonData().paramserr(message='用户名或密码错误') else: error = forms.get_errors() print(error) return ToJsonData().paramserr(message=error, data={}) # get请求返回登录页面 if request.method == 'GET': return render(request, 'users/login.html')
def edit_staff(request): mobile = request.POST.get('telephone') # 获取多个同名的值 groups_id = request.POST.getlist('groups') groups = Group.objects.filter(id__in=groups_id) try: user = MyUser.objects.get(mobile=mobile) user.is_staff = True user.save() except Exception as e: return ToJsonData().paramserr('添加失败') user.groups.set(groups) return redirect(reverse('cms:staff'))
def comment(request): '''评论''' if not request.user.is_authenticated: return ToJsonData().paramserr('请登录') try: content = request.POST.get('content') if not content: return ToJsonData().paramserr('请输入内容!') news_id = int(request.POST.get('newsId')) except: logger.error('添加评论时出现错误') raise Http404('系统出错!!!!') author = request.user comment = Comment.objects.create(content=content, author=author, news_id=news_id) comment.save() data = { 'author_name': author.username, 'create_time': comment.update_time, 'content': content } return ToJsonData().ok(data=data)
def image_code(request, uuid): ''' 定义获取图形验证视图''' # 1,获取redis数据库连接 try: redis_connection = get_redis_connection(alias='verification') # 连接数据库 except: return ToJsonData().servererr(message='未知错误') # 2,获取前端传递的uuid img_key = 'img_{}'.format(uuid) # 3,生成验证图片和验证码 text, img = captcha.generate_captcha() # 4,将图形验证码通过拼接uuid的方式储存之redis数据库 redis_connection.setex(img_key, constants.IMG_CODE_EXPIRY, text) # 键,过期时间,值, # 5,打印logger日志 logger.info('Img_code:{}'.format(text)) # 6,返回图形验证码 return HttpResponse(content=img, content_type='image/jpg' ) # 返回一张图片,可在模板中{% url 'verification:code' %}加载
def handle_no_permission(self): if self.raise_exception: return ToJsonData().unauth('没有权限访问') else: return super(VerifyView, self).handle_no_permission()
def banner_list(request): bannerList = Banner.objects.filter(is_delete=False).only('image_url', 'priority', 'news_id') banners = BannaerSerial(instance=bannerList, many=True) banner = banners.data return ToJsonData().ok(data=banner)
def delete(self, request, news_id): news = News.objects.filter(pk=news_id).first() news.is_delete = True news.save(update_fields=['is_delete']) return ToJsonData().ok()
def del_staff(request, user_id): if request.method == 'DELETE': user = MyUser.objects.filter(pk=user_id).first() user.is_staff = False user.save() return ToJsonData().ok()
def delete(self, request, banner_id): banner = Banner.objects.filter(is_delete=False, pk=banner_id).first() banner.is_delete = True banner.save(update_fields=['is_delete']) return ToJsonData().ok('删除成功')