Skip to main content
 首页 » 编程设计

python之如何在 django 中完成工作后删除模板中的 session 变量

2024年08月23日26dyllove98

我有一个名为 dashboard 的应用程序,我可以在其中重定向所有登录的用户,并提供由用户添加文章的选项。

用户点击表单中的提交按钮后,数据通过 POST 发送到 /dashboard/article/save URL,数据存储后, View 返回 HttpResponseRedirect 到 show_dashboard,后者使用 session 变量 result 呈现 dashboard.html。

在仪表板模板文件中,我添加了一个 notify.js 代码来向用户显示确认。问题是如果定义了这个 session 变量,每次显示仪表板页面时,即使用户没有添加文章也会触发通知。

(我刚开始使用网络框架,所以我不知道这一切是如何正常工作的)

部分代码:

dashboard/models.py:

class Article(models.Model): 
 
    id = models.IntegerField(primary_key=True) 
    ar_title = models.CharField(max_length=25) 
    ar_data = models.CharField(max_length=500) 
    user = models.ForeignKey(User,on_delete=models.CASCADE) 
 
    def getArticleTitle(self): 
        return self.title 
 
    def getArticleData(self): 
        return self.title 
 
    def getArticleAuthor(self): 
        return self.user 

仪表板/urls.py:

urlpatterns = [ 
    url(r'^$', views.show_dashboard,name='home_dashboard'), 
    url(r'^profile/save/', views.save_profile,name="save_profile"), 
    url(r'^newsfeed/', views.get_newsfeed,name="newsfeed",), 
    url(r'^profile/', views.show_profile,name="show_profile"), 
    url(r'^article/save/', views.add_new_article,name="add_new_article"), 
] 

仪表板/views.py:

@login_required 
def show_dashboard(request): 
    return render(request,'dashboard/dashboard.html',{'form':NewArticleForm()}) 
 
def add_new_article(request): 
    if(request.method == 'POST'): 
        ar_title= request.POST['ar_title'] 
        ar_data = request.POST['ar_data'] 
        user = request.user 
        form = NewArticleForm(request.POST) 
        if(form.is_valid()): 
            Article.objects.create(ar_title=ar_title,ar_data=ar_data,user=user) 
            request.session["result"] = "add_article_OK" 
            return HttpResponseRedirect(reverse('home_dashboard')) 

dashboard.html:

{% ifequal request.session.result 'add_article_OK' %} 
    <script> 
        $.notify("New article added successfully",  
            {position:"bottom right","className":"success","autoHide":"yes","autoHideDelay":"3000"}); 
    </script> 
{% endifequal %} 

现在,如何在显示消息后删除此 session 值?我知道 del request.session['result'] 可以发布,但我可以将它放在这个移动层次结构中的什么地方?

请您参考如下方法:

在 show_dashboard View 中执行。

不是从模板中的 session 中获取值,而是将其弹出到 View 中并将其传递给模板;这样您就可以一次性获取和清除它。

@login_required 
def show_dashboard(request): 
    context = { 
        'form': NewArticleForm(), 
        'result': request.session.pop('result', None) 
    } 
    return render(request,'dashboard/dashboard.html',context) 
 
... 
{% ifequal result 'add_article_OK' %}