def create_article(request): blog_id = request.session['userinfo']['blog__bid'] if request.method == 'GET': form = ArticleForm(request) return render(request, 'backend/create_article.html', {'form': form}) elif request.method == 'POST': form = ArticleForm(request, data=request.POST) if form.is_valid(): with transaction.atomic(): content = form.cleaned_data.pop('content') tag = form.cleaned_data.pop('tag') content = XSSFilter().process(content) form.cleaned_data['blog_id'] = blog_id article_obj = models.Article.objects.create( **form.cleaned_data) models.Article_detail.objects.create(article=article_obj, content=content) tag_list = [] for tag_id in tag: tag_id = int(tag_id) tag_list.append( models.Article2Tag(article=article_obj, tag_id=tag_id)) models.Article2Tag.objects.bulk_create(tag_list) return redirect('/backend/article-0-0.html') return render(request, 'backend/create_article.html', {'form': form})
def add_article(request): if request.method == 'GET': form = ArticleForm(request=request) return render(request, 'backend_add_article.html', {'form': form}) elif request.method == 'POST': print(request.POST) form = ArticleForm(request=request, data=request.POST) if form.is_valid(): with transaction.atomic(): tags = form.cleaned_data.pop('tags') content = form.cleaned_data.pop('content') form.cleaned_data['blog_id'] = request.session['user_info'][ 'blog__nid'] obj = models.Article.objects.create(**form.cleaned_data) models.ArticleDetail.objects.create(content=content, article=obj) tag_list = [] for tag in tags: tag = int(tag) tag_list.append( models.Article2Tag(article_id=obj.nid, tag_id=tag)) models.Article2Tag.objects.bulk_create(tag_list) return redirect('/backend/article-0-0.html') else: return render(request, 'backend_add_article.html', {'form': form}) else: return redirect('/')
def add_article(request): """ 添加文章 :param request: :return: """ if request.method == 'GET': obj = ArticleForm(request=request) return render(request, 'backend_add_article.html', {'form': obj}) elif request.method == 'POST': form = ArticleForm(request=request, data=request.POST) if form.is_valid(): with transaction.atomic(): tags = form.cleaned_data.pop('tags') detail = form.cleaned_data.pop('detail') detail = XSSFilter().process(detail) a_obj = models.ArticleContent.objects.create(content=detail) form.cleaned_data['detail_id'] = a_obj.nid form.cleaned_data['author_id'] = request.session['user_info'][ 'nid'] obj = models.Article.objects.create(**form.cleaned_data) tag_list = [] for tag_id in tags: tag_id = int(tag_id) tag_list.append( models.Article2Tag(article_id=obj.nid, tag_id=tag_id)) models.Article2Tag.objects.bulk_create(tag_list) return redirect('/backend/article-0-0.html') else: return render(request, 'backend_add_article.html', {'form': form}) else: return redirect('/')
def add_article(request): """ 添加文章 :param request: :return: """ if request.method == 'GET': form = ArticleForm(request=request) return render(request, 'backend_add_article.html', {'form': form}) elif request.method == 'POST': form = ArticleForm(request=request, data=request.POST) if form.is_valid(): with transaction.atomic(): #在执行上下文里面的内容时候时,遇到错误执行回滚操作,类似mysql回滚函数 tags = form.cleaned_data.pop('tags') content = form.cleaned_data.pop('content') content = XSSFilter().process(content) form.cleaned_data['blog_id'] = request.session['user_info'][ 'blog__nid'] obj = models.Article.objects.create(**form.cleaned_data) models.Article_Detail.objects.create(content=content, article=obj) tag_list = [] for tag_id in tags: tag_id = int(tag_id) tag_list.append( models.Article2Tag(article_id=obj.nid, tag_id=tag_id)) models.Article2Tag.objects.bulk_create(tag_list) return redirect('/backend/article-0-0.html') else: return render(request, 'backend_add_article.html', {'form': form}) else: return redirect('/')
def article_create(request): if request.method == 'GET': form = ArticleForm(request=request) return render(request, 'backend_article_create.html', {'form': form}) elif request.method == 'POST': form = ArticleForm(request=request, data=request.POST) if form.is_valid(): with transaction.atomic(): # 事务操作,方便出错回滚 tags = form.cleaned_data.pop('tags') # 只能选数据库本身有的tag,不能直接存进去 # 把提交过来的content去除掉,因为models字段里面没有 content = form.cleaned_data.pop('content') # 理论上content应该加一个防止XSS攻击 form.cleaned_data['blog_id'] = request.session['user_info']['blog__nid'] # print(form.cleaned_data) obj = models.Article.objects.create(**form.cleaned_data) models.ArticleDetail.objects.create( content=content, article=obj) tag_list = [] for tag_id in tags: # 文章分类是多选 tag_id = int(tag_id) tag_list.append( models.Article2Tag( article_id=obj.nid, tag_id=tag_id)) models.Article2Tag.objects.bulk_create(tag_list) # 批量插入数据 return redirect('/backend/backend_article-0-0.html') else: return render( request, 'backend_article_create.html', { 'form': form}) else: return redirect('/')
def edit_article(request, article_id, *args, **kwargs): """ eidit arthcle :param request: :return: """ blog_id = request.session.get('user_info')['blog__nid'] if blog_id: if request.method == 'GET': obj = models.Article.objects.filter(nid=article_id, blog_id=blog_id).first() tag_list = models.Article2Tag.objects.filter( article=obj).values_list('tag_id') if tag_list: tags = list(zip(*tag_list))[0] else: tags = () data = { 'title': obj.title, 'summary': obj.summary, 'content': obj.articledetail.content, 'category_id': obj.category_id, 'type_id': obj.type_id, 'tags': tags, } instance = form.ArticleForm(request=request, data=data) return render(request, 'backend/edit_article.html', {'form': instance}) elif request.method == 'POST': # stop modify other one's article like edit-article-1.hml change to edit-article-2.hml obj = models.Article.objects.filter(nid=article_id, blog_id=blog_id).first() if not obj: return redirect('/login.html') instance = form.ArticleForm(request=request, data=request.POST) if instance.is_valid(): content = instance.cleaned_data.pop('content') tags = instance.cleaned_data.pop('tags') print(tags) try: with transaction.atomic(): models.Article.objects.filter(nid=obj.nid).update( **instance.cleaned_data) models.ArticleDetail.objects.filter( article=obj).update(content=content) models.Article2Tag.objects.filter(article=obj).delete() tag_list = [] for x in tags: tag_id = int(x) tag_list.append( models.Article2Tag(article_id=obj.nid, tag_id=x)) # tag_list = map(lambda x: models.Article2Tag(article=obj, tag_id=x), tags) models.Article2Tag.objects.bulk_create(list(tag_list)) except Exception as e: return HttpResponse(e) return redirect('/backend/index.html') else: return redirect('/login.html')
def add_article(request): """ 添加文章 :param request: :return: """ if request.method == 'GET': form = ArticleForm(request=request) return render(request, 'backend_add_article.html', {'form': form}) elif request.method == 'POST': form = ArticleForm(request=request, data=request.POST) if form.is_valid(): with transaction.atomic(): tags = form.cleaned_data.pop('tags') # 移出 tags需要在第三张Article2Tag表上手动添加 content = form.cleaned_data.pop('content')# 移出 content需要在表ArticleDetail上手动添加、关联Article content = XSSFilter().process(content) # 对content进行数据过滤 过滤掉script等标签 form.cleaned_data['blog_id'] = request.session['user_info']['blog__nid']# 把博客id添加到cleande_data中 # dict格式cleaned_data 包含的字段{ 'blog_id' 'article_type' 'category_id' 'summary' 'title' } obj = models.Article.objects.create(**form.cleaned_data) # Article表添加cleaned_data里的内容 models.ArticleDetail.objects.create(content=content, article=obj) # ArticleDetail添加数据、关联 tag_list = [] for tag_id in tags: tag_id = int(tag_id) tag_list.append(models.Article2Tag(article_id=obj.nid, tag_id=tag_id)) models.Article2Tag.objects.bulk_create(tag_list) return redirect('/backend/article-0-0.html') else: return render(request, 'backend_add_article.html', {'form': form}) else: return redirect('/')
def edit_article(request, nid): """ 编辑文章 :param request: :return: """ blog_id = request.session['user_info']['blog__nid'] if request.method == 'GET': obj = models.Article.objects.filter(nid=nid, blog_id=blog_id).first() if not obj: return render(request, 'backend_no_article.html') tags = obj.tags.values_list('nid') if tags: tags = list(zip(*tags))[0] init_dict = { 'nid': obj.nid, 'title': obj.title, 'summary': obj.summary, 'category_id': obj.category_id, 'article_type_id': obj.article_type_id, 'content': obj.articledetail.content, 'tags': tags } form = ArticleForm(request=request, data=init_dict) return render(request, 'backend_edit_article.html', { 'form': form, 'nid': nid }) elif request.method == 'POST': form = ArticleForm(request=request, data=request.POST) if form.is_valid(): obj = models.Article.objects.filter(nid=nid, blog_id=blog_id).first() if not obj: return render(request, 'backend_no_article.html') with transaction.atomic(): content = form.cleaned_data.pop('content') content = XSSFilter().process(content) tags = form.cleaned_data.pop('tags') models.Article.objects.filter(nid=obj.nid).update( **form.cleaned_data) models.ArticleDetail.objects.filter(article=obj).update( content=content) models.Article2Tag.objects.filter(article=obj).delete() tag_list = [] for tag_id in tags: tag_id = int(tag_id) tag_list.append( models.Article2Tag(article_id=obj.nid, tag_id=tag_id)) models.Article2Tag.objects.bulk_create(tag_list) return redirect('/backend/article-0-0.html') else: print(form.errors) return render(request, 'backend_edit_article.html', { 'form': form, 'nid': nid })
def article_edit(request, nid): blog_id = request.session['user_info']['blog__nid'] if request.method == 'GET': article_obj = models.Article.objects.filter( nid=nid, blog_id=blog_id).first() content_dict = models.ArticleDetail.objects.filter( article=article_obj).values('content').first() tag_id = article_obj.tags.values_list('nid') print(tag_id) if tag_id: tag_id = list(zip(*tag_id))[0] print(tag_id) condition = { 'nid': article_obj.nid, 'title': article_obj.title, 'summary': article_obj.summary, 'content': content_dict['content'], 'article_type_id': article_obj.article_type_id, 'category_id': article_obj.category_id, 'tags': tag_id } form = ArticleForm(request=request, data=condition) return render( request, 'backend_article_edit.html', { 'form': form, 'nid': nid}) elif request.method == 'POST': form = ArticleForm(request=request, data=request.POST) if form.is_valid(): obj = models.Article.objects.filter( nid=nid, blog_id=blog_id).first() with transaction.atomic(): # 事务操作,方便出错回滚 tags = form.cleaned_data.pop('tags') # 只能选数据库本身有的tag,不能直接存进去 # 把提交过来的content去除掉,因为models字段里面没有 content = form.cleaned_data.pop('content') # 理论上content应该加一个防止XSS攻击 models.Article.objects.filter( nid=obj.nid).update( **form.cleaned_data) models.ArticleDetail.objects.filter( article=obj).update(content=content) models.Article2Tag.objects.filter(article=obj).delete() tag_list = [] for tag_id in tags: # 文章分类是多选 tag_id = int(tag_id) tag_list.append( models.Article2Tag( article_id=obj.nid, tag_id=tag_id)) models.Article2Tag.objects.bulk_create(tag_list) # 批量插入数据 return redirect('/backend/backend_article-0-0.html') else: return render( request, 'backend_article_edit.html', { 'form': form, 'nid': nid}) else: return redirect('/')
def edit_article(request, article_id): """ 编辑文章 :param request: :return: """ blog_id = request.session['user_info']['blog__nid'] if request.method == 'GET': o = models.Article.objects.filter(nid=article_id, blog_id=blog_id).first() if not o: return render(request, 'backend_no_article.html') tags = o.tags.values_list('nid') if tags: tags = list(zip(*tags))[0] init_dict = { 'title': o.title, 'content': o.content, 'category_id': o.category_id, 'tags': tags, 'detail': o.detail.content } obj = ArticleForm(request=request, initial=init_dict) return render(request, 'backend_edit_article.html', { 'form': obj, 'article_id': article_id }) elif request.method == 'POST': form = ArticleForm(request=request, data=request.POST) if form.is_valid(): obj = models.Article.objects.filter(nid=article_id, blog_id=blog_id).first() with transaction.atomic(): detail = form.cleaned_data.pop('detail') detail = XSSFilter().process(detail) tags = form.cleaned_data.pop('tags') models.Article.objects.filter(nid=article_id).update( **form.cleaned_data) models.ArticleContent.objects.filter(article=obj).update( content=detail) models.Article2Tag.objects.filter(article=obj).delete() tag_list = [] for tag_id in tags: tag_id = int(tag_id) tag_list.append( models.Article2Tag(article_id=obj.nid, tag_id=tag_id)) models.Article2Tag.objects.bulk_create(tag_list) return redirect('/backend/article-0-0.html') else: return render(request, 'backend_edit_article.html', { 'form': form, 'nid': article_id })
def add_article(request, site): """ 添加文章 :param request: 请求 :param site: 博主 :return: """ # 从数据库中获取博客以及属于博客的分类,标签列表 blog = models.Blog.objects.filter(site=site).select_related('user').first() #category_list = models.Category.objects.filter(blog=blog) #tag_list = models.Tag.objects.filter(blog=blog) if request.method == 'GET': article_form = ArticleForm(request=request) return render(request, 'web_home/add_article.html', { 'article_form': article_form, 'blog': blog, }) else: #print(request.POST) article_form = ArticleForm(request=request, data=request.POST) if article_form.is_valid(): # 获取验证后的数据 article_post = article_form.cleaned_data #print(article_post) tags = article_post.pop('tags') #category_title = article_post.pop('category') article_body = article_post.pop('body') # 过滤掉白名单之外的标签 #article_body = XSSFilter().process(article_body) #print(article_type_id) # 在文章表中添加文章记录 article = models.Article.objects.create(blog=blog, **article_post) # 文章内容表与文章表是一对一的关系 models.ArticleDetail.objects.create(content=article_body, article=article) tag_list = [] for tag_id in tags: tag_id = int(tag_id) tag_list.append( models.Article2Tag(article=article, tag_id=tag_id)) models.Article2Tag.objects.bulk_create(tag_list) return redirect('web:user_blog', site) else: print(article_form.errors) return render(request, 'web_home/add_article.html', { "article_form": article_form, 'blog': blog, })
def add_article(request): """ 添加文章 :param request: :return: """ username = request.session.get("username", None) # 获取session中的用户名 user_obj = models.UserInfo.objects.filter( username=username).select_related("blog").first() # 获取用户对象 if request.method == "GET": article_form = ArticleForm(request=request) return render(request, 'backend_add_article.html', { "user_obj": user_obj, "article_form": article_form, }) elif request.method == "POST": article_form = ArticleForm(request=request, data=request.POST) if article_form.is_valid(): with transaction.atomic(): # 开启事务 top_list = article_form.cleaned_data.pop("top") # 获取高级选项列表 top_bool = int(top_list[0]) if top_list else 0 # 获取是否选中置顶 obj = models.Article( title=article_form.cleaned_data.pop("title"), # 文章标题 summary=article_form.cleaned_data.pop("summary"), # 文章简介 blog_id=user_obj.blog.nid, # 博客ID category_id=article_form.cleaned_data.pop( "category_id"), # 分类ID article_type_id=article_form.cleaned_data.pop( "article_type_id"), # 类型ID top=top_bool # 是否置顶 ) obj.save() # 创建文章对象 content = XSSFilter().process( article_form.cleaned_data.pop("content")) # 获取过滤好的文章内容 models.ArticleDetail.objects.create(content=content, article_id=obj.nid) tags = article_form.cleaned_data.pop("tags") # 获取用户选择的标签ID tag_list = [] # 存储标签对象 for tag_id in tags: # 循环所有标签ID,生成标签对象并存入列表 tag_id = int(tag_id) tag_list.append( models.Article2Tag(article_id=obj.nid, tag_id=tag_id)) models.Article2Tag.objects.bulk_create(tag_list) # 批量创建标签对象 return redirect("/backend/article-0-0.html") else: return render(request, 'backend_add_article.html', { "user_obj": user_obj, "article_form": article_form, })
def add_article(request, *args, **kwargs): """ create new article :param request: :param args: reqquest data, session :param kwargs: :return: """ if request.method == "GET": form_obj = form.ArticleForm(request=request) return render(request, 'backend/add_article.html', {'form': form_obj}) elif request.method == "POST": user_info = request.session.get('user_info') if user_info: blog_id = user_info['blog__nid'] form_obj = form.ArticleForm(request=request, data=request.POST) if form_obj.is_valid(): try: with transaction.atomic(): tags_id = form_obj.cleaned_data.pop('tags') content = form_obj.cleaned_data.pop('content') form_obj.cleaned_data['blog_id'] = blog_id article_obj = models.Article.objects.create( **form_obj.cleaned_data) models.ArticleDetail.objects.create( content=content, article=article_obj) tag_list = list( map( lambda x: models.Article2Tag( tag_id=int(x), article=article_obj), tags_id)) models.Article2Tag.objects.bulk_create(tag_list) except Exception as e: # return render(request, 'backend/add-article.html', {'form': form_obj}) print(e) return HttpResponse("Created Failed") else: return render(request, 'backend/add_article.html', {'form': form_obj}) return redirect("/backend/index.html") else: return redirect("/account/login.html")
def add_article(request): """ 添加文章 :param request: :return: """ if request.method == 'GET': form = ArticleForm(request=request) return render(request, 'backend_add_article.html', {'form': form}) elif request.method == 'POST': form = ArticleForm(request=request, data=request.POST) if form.is_valid(): with transaction.atomic(): tags = form.cleaned_data.pop('tags') content = form.cleaned_data.pop('content') print(content) content = XSSFilter().process( content ) #每一个用户请求到来的时候,都需要实例化这个类,而这个实例化的对象每次都一样,为了节省内存,使用单例模式 form.cleaned_data['blog_id'] = request.session['user_info'][ 'blog__nid'] obj = models.Article.objects.create(**form.cleaned_data) models.ArticleDetail.objects.create(content=content, article=obj) tag_list = [] for tag_id in tags: tag_id = int(tag_id) tag_list.append( models.Article2Tag(article_id=obj.nid, tag_id=tag_id)) models.Article2Tag.objects.bulk_create(tag_list) return redirect('/backend/article-0-0.html') else: return render(request, 'backend_add_article.html', {'form': form}) else: return redirect('/')
def add_article(request): ''' 增添文章 :param request: :return: ''' if request.method == 'GET': upload_avatar = request.session.get('user_info')['avatar'] print(request) # <WSGIRequest: GET '/backend/add-article.html'> print(request.session['user_info']) form = ArticleForm(request=request) return render( request, 'backend_add_article.html', { 'form': form, 'upload_avatar': upload_avatar }, ) elif request.method == 'POST': upload_avatar = request.session.get('user_info')['avatar'] print('heool') print(request.POST) form = ArticleForm(request, request.POST) if form.is_valid(): print('你好') print(form.cleaned_data) tags = form.cleaned_data.pop('tags') print(type(tags[0])) # <class 'str'> print(type(tags)) # <class 'list'> content = form.cleaned_data.pop('content') form.cleaned_data['blog_id'] = request.session['user_info'][ 'blog__nid'] obj = models.Article.objects.create(**form.cleaned_data) models.ArticleDetail.objects.create(content=content, article=obj) tag_list = [] for tag_id in tags: # 将 标签表中的字符串类型转化成数字类型 tag_id = int(tag_id) tag_list.append( models.Article2Tag(article_id=obj.nid, tag_id=tag_id)) print('表亲列表') print( tag_list ) #[<Article2Tag: Article2Tag object>, <Article2Tag: Article2Tag object>] # for i in tag_list: # print(i.article.title,i.tag.title) # 阿打算 HTML ;阿打算 HTML # def bulk_create(self, objs, batch_size=None): # # 批量插入 # # batch_size表示一次插入的个数 # objs = [ # models.DDD(name='r11'), # models.DDD(name='r22') # ] # models.DDD.objects.bulk_create(objs, 10) models.Article2Tag.objects.bulk_create(tag_list) return redirect('/backend/article-0-0.html') else: return render(request, 'backend_add_article.html', { 'form': form, 'upload_avatar': upload_avatar }) else: return redirect('/')
def edit_article(request, nid): ''' 编辑文章 :param request: :param nid: :return: ''' blog_id = request.session['user_info']['blog__nid'] if request.method == 'GET': obj = models.Article.objects.filter(nid=nid, blog_id=blog_id).first() # print(type(obj)) #<class 'django.db.models.query.QuerySet'>,此时是没有first() print(type(obj)) # <class 'repository.models.Article'>,此时才是一个文章对象 if not obj: return render(request, 'backend_no_article.html', {'obj': obj}) tags = obj.tags.values_list('nid', 'title') print(tags) # <QuerySet [(1, 'HTML'), (2, '孤独者的python之路')]> if tags: tags = list(zip(*tags))[0] print(tags) #(1, 2) init_dict = { 'nid': obj.nid, 'title': obj.title, 'summary': obj.summary, 'category_id': obj.category_id, 'article_type_id': obj.article_type_id, 'content': obj.articledetail.content, 'tags': tags, } # 'content':obj.articledetail.content, 反跨的代表 form = ArticleForm(request=request, data=init_dict) return render(request, 'backend_editor_article.html', { 'form': form, 'nid': nid }) elif request.method == 'POST': form = ArticleForm(request, request.POST) if form.is_valid(): obj = models.Article.objects.filter(nid=nid, blog_id=blog_id).first() if not obj: return render( request, 'backend_no_article.html', ) content = form.cleaned_data.pop('content') tags = form.cleaned_data.pop('tags') models.Article.objects.filter(nid=obj.nid).update( **form.cleaned_data) models.ArticleDetail.objects.filter(article=obj).update( content=content) models.Article2Tag.objects.filter(article=obj).delete() tag_list = [] for tag_id in tags: tag_id = int(tag_id) tag_list.append( models.Article2Tag(article_id=obj.nid, tag_id=tag_id)) models.Article2Tag.objects.bulk_create(tag_list) return redirect('/backend/article-0-0.html') else: return render(request, 'backend_editor_article.html', { 'form': form, 'nid': nid })
def edit_article(request, aid): blog_id = request.session['userinfo']['blog__bid'] if request.method == 'GET': article_obj = models.Article.objects.filter(blog_id=blog_id, aid=aid).first() if not article_obj: return HttpResponse('not Found') article_tag = article_obj.tag.values_list('tid') # <QuerySet [(2,)]> if article_tag: article_tag = list(zip(*article_tag))[0] try: content = article_obj.article_detail.content except Exception as e: return HttpResponse('not Found') init_dict = { 'aid': article_obj.aid, 'title': article_obj.title, 'summary': article_obj.summary, 'content': content, 'article_type_id': article_obj.article_type_id, 'tag': article_tag, } form = ArticleForm(request, data=init_dict) # 把数据库的内容展现到get页面上 # print(111,init_dict) return render(request, 'backend/edit_article.html', { 'form': form, 'aid': aid }) elif request.method == 'POST': form = ArticleForm(request, data=request.POST) if form.is_valid(): article_obj = models.Article.objects.filter(blog_id=blog_id, aid=aid).first() if not article_obj: return HttpResponse('Not Found') with transaction.atomic(): # print(222222,form.cleaned_data) content = form.cleaned_data.pop('content') content = XSSFilter().process(content) tag = form.cleaned_data.pop('tag') # print(777,tag) models.Article.objects.filter(aid=article_obj.aid).update( **form.cleaned_data) models.Article_detail.objects.filter( article=article_obj).update(content=content) models.Article2Tag.objects.filter(article=article_obj).delete() tag_list = [] for tag_id in tag: # tag_list.append(models.Article2Tag.objects.filter(article=article_obj, tag_id=int(tag_id))) # [<QuerySet []>],不能用这个,被删了找不到了 tag_list.append( models.Article2Tag(article=article_obj, tag_id=int(tag_id)) ) # [<Article2Tag: Article2Tag object>, <Article2Tag: Article2Tag object>] print(5555, tag_list) models.Article2Tag.objects.bulk_create(tag_list) return redirect('/backend/article-0-0.html') else: return render(request, 'backend/edit_article.html', { 'form': form, 'aid': aid })
def edit_article(request, nid): """ 编辑文章 :param request: :return: """ username = request.session.get("username", None) # 获取session中的用户名 user_obj = models.UserInfo.objects.filter( username=username).select_related("blog").first() # 获取用户对象 if request.method == "GET": article_obj = models.Article.objects.filter( nid=nid, blog_id=user_obj.blog.nid).first() # 获取文章对象 if not article_obj: return render(request, 'backend_no_article.html') tags = article_obj.tags.values_list('nid') # 获取文章对应标签 if tags: tags = [i[0] for i in list(tags)] # 将每一个标签ID放入列表中 article_form = ArticleForm( request=request, initial={ "title": article_obj.title, # 文章标题 "summary": article_obj.summary, # 文章简介 "content": article_obj.article_detail.content, # 文章内容 "article_type_id": article_obj.article_type_id, # 文章类型ID "category_id": article_obj.category_id, # 文章分类ID "tags": tags, # [18, 25] 列表中每一个元素为标签ID,元组也可以 "top": [int(article_obj.top)] # 显示文章是否置顶 }) return render( request, 'backend_edit_article.html', { "user_obj": user_obj, "article_obj": article_obj, "article_form": article_form, }) elif request.method == "POST": article_form = ArticleForm(request=request, data=request.POST) article_obj = models.Article.objects.filter( nid=nid, blog_id=user_obj.blog.nid).first() # 获取文章对象 if not article_obj: return render(request, 'backend_no_article.html') if article_form.is_valid(): with transaction.atomic(): top_list = article_form.cleaned_data.pop("top") # 获取高级选项列表 top_bool = int(top_list[0]) if top_list else 0 # 获取是否选中置顶 content = XSSFilter().process( article_form.cleaned_data.pop("content")) # 获取过滤好的文章内容 models.ArticleDetail.objects.filter( article=article_obj).update(content=content) # 更新文章内容 models.Article.objects.filter(nid=article_obj.nid).update( **{ "title": article_form.cleaned_data.pop("title"), "summary": article_form.cleaned_data.pop("summary"), "article_type_id": article_form.cleaned_data.pop("article_type_id"), "category_id": article_form.cleaned_data.pop("category_id"), "top": top_bool }) # 更新文章 # 更新文章对应标签 models.Article2Tag.objects.filter( article=article_obj).delete() # 首先删除原有的标签 tags = article_form.cleaned_data.pop("tags") # 获取用户选择的标签ID tag_list = [] # 存储标签对象 for tag_id in tags: # 循环所有标签ID,生成标签对象并存入列表 tag_id = int(tag_id) tag_list.append( models.Article2Tag(article_id=article_obj.nid, tag_id=tag_id)) models.Article2Tag.objects.bulk_create(tag_list) # 批量创建标签对象 return redirect("/backend/article-0-0.html") else: return render( request, 'backend_edit_article.html', { "user_obj": user_obj, "article_obj": article_obj, "article_form": article_form, })
def edit_article(request, site, nid): """ 修改文章函数 :param request: :param site: :param nid: :return: """ blog = models.Blog.objects.get(site=site) if request.method == 'GET': article = models.Article.objects.get(nid=nid, blog=blog) if not article: return HttpResponse('没有这篇文章') tags = article.tags.values_list('nid') #print(tags) if tags: tags = list(zip(*tags))[0] init_article = { 'title': article.title, 'summary': article.summary, 'body': article.articledetail.content, 'article_type_id': article.article_type_id, 'category_id': article.category_id, 'tags': tags, } article_form = ArticleForm(request=request, data=init_article) return render(request, 'web_home/edit_article.html', { 'article_form': article_form, 'nid': article.nid, 'blog': blog, }) else: article_form = ArticleForm(request=request, data=request.POST) if article_form.is_valid(): article_post = article_form.cleaned_data article = models.Article.objects.get(nid=nid, blog=blog) if not article: return HttpResponse('文章已经被删除') with transaction.atomic(): body = article_post.pop('body') # 过滤掉白名单之外的标签 #body = XSSFilter().process(body) tags = article_post.pop('tags') models.Article.objects.filter(nid=nid).update(**article_post) models.ArticleDetail.objects.filter(article=article).update( content=body) models.Article2Tag.objects.filter(article=article).delete() tag_list = [] for tag_id in tags: tag_id = int(tag_id) tag_list.append( models.Article2Tag(article=article, tag_id=tag_id)) print(tag_list) models.Article2Tag.objects.bulk_create(tag_list) return redirect('web_home:user_blog', site) else: return render(request, 'web_home/edit_article.html', { 'article_form': article_form, 'nid': nid, 'blog': blog, })