想學習python,但是找不到方向,最近想突然對web編程感興趣了,所有一直在看,剛剛對著教程做了一點東西。
使用Django提交評論時,如果使用Form提交評論信息,那么提交成功后,最好是能把剛剛輸入的評論信息顯示出來;
所以提交評論信息后,最好能馬上將評論內容顯示出來。
當時考慮了3種方法:
1、最開始考慮使用Ajax+json,從服務器讀取最新的一條評論信息,當多個用戶同時提交評論的時候,這種辦法會出現不同步的現象,pass掉;
2、還是使用Ajax+json,客戶端傳遞當前頁面的評論數量,服務端將客戶端未顯示的評論全部返回,在ajax的回調函數中加載這些評論;
3、客戶端通過ajax向服務器取評論信息,服務器使用模板將評論內容全部渲染為html文本內容,并將內容返回到客戶端,客戶端將收到的HTML文本插入DIV中。
在方法1和2中,需要在JS代碼中解析JSON數據并根據JSON數據生成HTML內容,使用方法3可以使用模板統一處理;相對于處理JSON數據和渲染模板,方法3會加重服務器負擔。
下面是代碼:
評論的mudel
1 class BlogContent(models.Model):2 blog = models.ForeignKey(Blog)3 auth = models.CharField('昵稱', max_length=40)4 contents = models.TextField('內容',max_length=2000)5 time = models.TimeField(auto_now_add=True)6 date = models.DateField(auto_now_add=True)
客戶端Form表單
{# 下面是評論輸入區域 #} <div id="blogComment"> <form id="user_content"> <div>昵稱 <input type="text" id="username" value="匿名"><p/></div> <textarea id="content_value"></textarea><p/> <input type="text" id="blog_id" value="{{ item.id }}" style="display:none;"/> <input type="submit" id="content_submit" value="提交評論"/> </form> </div>
提交評論的JS代碼
1 $(function() { 2 $("#user_content").submit(function(){ 3 var username = $("#username").val(); 4 var content_value = $("#content_value").val(); 5 var blog_id = $("#blog_id").val() 6 $(this).ajaxSubmit({ 7 type:"post", //提交方式 8 dataType:"text", //數據類型 9 url:"/content/", //請求url10 data: {11 'username': username,12 'content_value': content_value,13 'blog_id':blog_id14 },15 success:function(data){ //提交成功的回調函數16 loadNewContents()17 $("#content_value").val("");18 }19 });20 return false; //不刷新頁面21 });22 });
從服務器讀取全部評論信息并進行顯示的JS代碼
1 //加載最新的評論 2 function loadNewContents() 3 { 4 var lstContent = $("#lstContents"); 5 //lstContent.html(""); 6 7 var blog_id = $("#blog_id").val() 8 $(this).ajaxSubmit({ 9 type: "post", //提交方式10 dataType: "text", //數據類型11 url: "/allcontent/", //請求url12 data: {13 'blog_id': blog_id14 },15 success: function (data) { //提交成功的回調函數16 if(data.length >0)17 {18 $("#lstContents").html(data);19 20 }21 }22 });23 }
Django的模板
1 {% for item in list_contents %}2 <div class="content">3 <div class="content_info">#{{ forloop.counter }}樓 {{ item.auth }} 發表于 {{ item.date }} {{ item.time }}<p/></div>4 <div class="content_value">{{ item.contents }}</div>5 <div class="content_option"><a href="#">回復</a><a href="#">引用 </a></div>6 </div>7 {% endfor %}
Django的views
1 @csrf_exempt 2 def get_blog_all_contents(request): 3 response = HttPResponse() 4 response['Content-Type'] = "text/json" 5 strId = request.POST.get("blog_id", '') 6 if strId: 7 try: 8 blog_id = int(strId) 9 item = Blog.objects.get(id=blog_id)10 list_contents = item.blogcontent_set.order_by('date', 'time')11 return render_to_response("blogContentList.html", locals())12 except Exception, e:13 print(e)14 return ""
新聞熱點
疑難解答