django1.11x + postgresql9.4实现一个评论系统的demo

11 篇文章 0 订阅
6 篇文章 0 订阅

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值