django1.11x + postgresql9.4實現一個評論系統的demo

Django1.11x+Postgres9.4實現一個評論系統的demo

by:aideny

time:2019/10/4
注:博主也是前天才接觸django和postgresql,讀者如果有什麼問題可以一起交流溝通~

0.預處理

開發環境首先要安裝配置好postgresql,並且要創建好一個可用的數據庫,這個數據庫就是後面django主要用到的。

博主配置:

Postgresql: 9.4
數據庫:test
用戶名:test
密碼:test

1. django相關

1.1 啓動一個項目:

django-admin startproject TestDjango

1.2 django配置相關:

打開TestDjango/TestDjango/setting.py

1.2.1 配置數據庫

DATABASES = {
    # django默認的數據庫是sqlite,我們需要註釋掉或者刪掉關於sqlite的配置
    # 'default': {
    #     'ENGINE': 'django.db.backends.sqlite3',
    #     'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    # }
    # postgressql相關的配置
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'test',  # 在postgresql中創建的數據庫名
        'USER': 'test',  # postgresql 用戶名
        'PASSWORD': 'test',  # postgresql 用戶密碼
        'HOST': '192.168.204.129',  # 主機IP
        'PORT': 5432,  # postgresql 端口號
    }
}

1.2.2 配置時區

USE_IZ = False  # 不使用默認的時區
TIME_ZONE = 'Asia/Shanghai'  # 使用上海時區

1.2.3 配置模板路徑

TEMPLATES = [
	{
		# somthing configuration
		'DIRS': [BASE_DIR + "/templates"],  # 配置模板路徑,注意結尾有一個半角逗號
		# somthing configuration
	}
]

manage.py的同級目錄下創建目錄:templates

1.2.4 其他配置

ALLOWED_HOSTS = ['*']  # 表示允許所有主機訪問

1.3 新建一個模型:

python manage.py startapp fakedata

1.4 設計模型結構:

這裏是這樣設計的,models包含兩個類:User和Comment。

User類包含的屬性有:用戶名,密碼,Email,註冊時間。

Comment包含的屬性有:評論內容,評論發佈時間。

這兩個類之間還有一種“多對多”的關係,在django中表示這種關係的機制是:它會自動創建一張表來存儲這兩個類之間的關係,如果這張表中只有這兩個字段(兩個類),那麼直接用ManyToManyField屬性默認的即可;如果這張表中除了這兩個字段外,還有其他的字段,比如這裏的用戶和評論關係表中,除了用戶和評論內容外,還有一個評論的發佈時間,那麼就要用throught導出到另外的一個類來說明。詳細的操作步驟可以參考下面的代碼。

打開fakedata/models.py

# -*- coding:UTF-8 -*- 
from __future__ import unicode_literals

from django.db import models
from django.utils import timezone

class User(models.Model):
    name = models.CharField(max_length=20)  # 用戶名
    password = models.CharField(max_length=20)  # 用戶密碼
    email = models.EmailField()  # Email
    register_date = models.DateField()  # 註冊時間
    
class Comment(models.Model):
    data = models.CharField(max_length=100)  # 評論內容
    users = models.ManyToManyField(User, through="UserComment")  # 建立多對多關係

# 用throught導出到一個單獨的類來說明用戶和評論之間的關係
class UserComment(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)  # user作爲外鍵
    comment = models.ForeignKey(Comment, on_delete=models.CASCADE)  # comment作爲外鍵
    pushed_at = models.DateTimeField(default=timezone.now)
    # 用戶和評論的關係表使用自定義的名稱
    class Meta:
        db_table = "user_comment_relationsship"
    

1.5 修改django配置文件:

打開TestDjango/TestDjango/setting.py

INSTALLED_APPS = [
	# default confiuratuin
	'fakedate',  # 添加剛纔的模型,注意結尾有一個半角逗號
]

1.6 在django中應用模型:

1.6.1 創建模型

python manage.py makemigrations

1.6.2 應用到數據庫

python manage.py migrate

到這裏django項目中要用到的數據庫表結構就已經創建好了。

1.7 編寫模型代碼:

編寫模型代碼和設計模板結構其實是同步進行的,在編寫模型代碼的過程中考慮會用到的模板

打開TestDjango/TestDjango/testdb.py(這個文件需要我們創建,文件名無所謂,合理即可):

# -*- coding:UTF-8 -*-

from django.http import HttpResponse
from django.shortcuts import render_to_response
from datetime import date
from datetime import datetime

from fakedata.models import User  # 引入User表句柄
from fakedata.models import Comment  # 引入Comment表句柄
from fakedata.models import UserComment  # 引入UserComment表句柄

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

def register_form(request):
    return render_to_response('register_form.html')

def register(request):
    '''
    註冊用戶
    '''
    request.encoding = 'utf-8'
    user_name = request.GET['UserName']
    passwd = request.GET['PassWord']
    Email = request.GET['Email']
    User.objects.create(name=user_name, password=passwd, email=Email, register_date=date.today())

    response = "<p>註冊成功!</p>"
    return HttpResponse(response)

def get_user(request):
    '''
    獲取已註冊的所有用戶信息
    '''
    List = User.objects.all()
    response = ""
    for var in List:
        response += var.name + " | " + var.password + " | " + var.email + "<br>"
    return HttpResponse("<p>" + response + "</p>")

def push_comment_form(request):
    return render_to_response('comment_form.html')

def push_comment(request):
    '''
    發表評論
    '''
    request.encoding = 'utf-8'
    user_name = request.GET['UserName']
    message = request.GET['Message']

    # 獲取作者中間模型
    user_tmp = User.objects.get(name=user_name)
    # 添加評論,並獲取評論中間模型
    comment_tmp = Comment.objects.create(data=message)
    # 向 user_comment_relationship 表添加數據
    UserComment.objects.create(user=user_tmp, comment=comment_tmp, pushed_at=datetime.now())

    response = "<p>註冊成功!</p>"
    return HttpResponse(response)

def get_comment(request):
    '''
    獲取評論信息
    '''
    List = UserComment.objects.all()
    response = ""
    for var in List:
        response += var.user.name + " | " + str(var.pushed_at)[0:-7] + " | " +\
                    var.comment.data + "<br>"
    return HttpResponse("<p>" + response + "</p>")

1.8 添加url路徑:

打開TestDjango/TestDjango/urls.py

from django.conf.urls import url
from django.contrib import admin
from . import testdb

urlpatterns = [
    # url(r'^admin/', admin.site.urls),
    url(r'^register_form/$', testdb.register_form),  # 註冊界面url
    url(r'^register/$', testdb.register),  # 註冊cgi url
    url(r'^get_user/$', testdb.get_user),  # 獲取所有用戶信息url
    url(r'^comment_form/$', testdb.push_comment_form),  # 添加評論界面
    url(r'^comment/$', testdb.push_comment),  # 評論cgi url
    url(r'^get_comment/$', testdb.get_comment),  # 獲取所有評論信息界面url
]

1.9 編寫模板代碼

前端頁面寫的很簡陋,這裏的代碼只是爲了簡單的支持我們項目的運行~

編寫register_form.html

<DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>Register</title>
  </head>

  <body>
    <form action="/register/" method="get">
      UserName: <input type="text", name="UserName"><br>
      PassWord: <input type="text", name="PassWord"><br>
      Email   : <input type="text", name="Email"><br>
      <input type="submit" value"提交">
    </form>
  </body>
</html>

編寫comment_form.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>評論</title>
  </head>

  <body>
    <form action="/comment/">
      用戶名:<input type="text" name="UserName"><br><br>
      <textarea rows="10" cols="30" placeholder="內容" name="Message"></textarea>
      <input type="submit" value="發表">
    </form>
  </body>

</html>

1.10 運行項目

現在這個項目就可以完整跑一邊流程了。

啓動項目:python manage.py runserver 192.168.204.128:8000

訪問http://192.168.204.128/register_form/
register_form

註冊:

register

訪問http://192.168.204.128/get_user/
get_user

訪問http://192.168.204.128/comment_form/
comment_form

訪問http://192.168.204.128/get_comment/
comment

2. postgresql

2.1 相關命令附錄

啓動命令:psql -h localhost -p 5432 -U test --password
列舉數據庫:\l
選擇數據庫:\c 數據庫名
查看該某個庫中的所有表:\dt
查看某個庫中的某個表結構:\d 表名
退出psgl:\q

參考資料

  • https://docs.djangoproject.com/en/1.11/ref/models/fields/#model-field-types

  • https://m.w3cschool.cn/django

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章