大圣画廊v0.3.5

来源:互联网 发布:intent传递数据时 编辑:程序博客网 时间:2024/04/29 11:17

v0.3.5更新内容

在用户系统基础上增加一个留言板板块,包括一个输入表单,已存在的留言会放在表单的上方,允许不登录留言。

以下依然是按照四个板块分开详解。

模型设计(models.py)

需要新增一个留言(Message)类型。

    #v0.3.5    class Message(models.Model):        content=models.CharField(max_length=3000)        author=models.ForeignKey(User,related_name='user_messages',default=2)        time=models.DateTimeField(auto_now_add=True)        def __unicode__(self):            return u'%s'%(self.content)

具有三个属性,内容,作者和时间,其中作者和User相关联的外键,这里设置了defualt=2,其实是一个很奇葩的做法,因为我的想法是允许不登录发言,但是如果不登录的话,request.user的类型就不是User而是匿名用户AnonymousUser ,在视图中就无法实例化成功,所以我的解决办法是注册一个名字叫佚名的用户,在管理员账户之后,所以是用户id是2,当未登录留言时自动使用这个用户示例生成message。

模板(message.html)

    {% extends "base.html" %}    {% block title %}留言板{% endblock %}    {% block content %}    {% for msg in msgs %}    <div class="list-group">      <a href="#" class="list-group-item">        <h4 class="list-group-item-heading">{{msg.content}}</h4>        <p class="list-group-item-text" align="right">——{{msg.author}}</p>        <p class="list-group-item-text" align="right">at {{msg.time}}</p>      </a>    </div>    {% endfor %}    <form class="form-horizontal panel container" method="POST" action=".">{% csrf_token %}        <div class="form-group">            <label  class="control-label" for="exampleMessage">留言:</label>            <textarea type='text' name='content' value="" class="form-control" id="exampleMessage" placeholder=""></textarea>        </div>        <div class="form-group col-md-2">            <input type="hidden" name="next" value="/"/>            <input type="submit" class="btn btn-lg btn-primary" value="发布"/>        </div>    </form>    {% endblock %}

在留言框的上方展示内容。

视图(views.py)

    #v0.3.5    def message(request):        if request.method=='POST':            content=request.POST.get('content')            try:                new_message=Message.objects.create(                content=content,                author=request.user                )            except Exception, e:                new_message=Message.objects.create(                content=content                )#如果用户未登录,匿名用户将会报错                new_message.save()                return HttpResponseRedirect('/msg/')            else:                new_message.save()                return HttpResponseRedirect('/msg/')        else:            msgs=Message.objects.all().order_by('-time')            return render_to_response('message.html',RequestContext(request,{'msgs':msgs})

这里用了一个try-except异常处理,在try部分如果author的类型识别为AnonymousUser,会报ValueError错误,转入except分支,此时创建message对象就不加入author属性,这个属性就会自动使用默认的2,也就是注册的“佚名”用户。

路由

    #v0.3.5    url(r'^msg/',message,name='留言板页'),

完。

0 0
原创粉丝点击