前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python Django个人网站搭建18-添加网站留言功能

Python Django个人网站搭建18-添加网站留言功能

作者头像
zifan
发布2021-12-14 12:36:44
1K1
发布2021-12-14 12:36:44
举报
文章被收录于专栏:个人编程技术学习与分享

作者: zifanwang  发布于2020-06-12

首先打开cmd,cd到mysite并输入:

代码语言:javascript
复制
C:\mysite>python manage.py startapp commen

C:\mysite>

接着修改mysite/settings.py的INSTALLED_APPS:

代码语言:javascript
复制
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'article',
    'userprofile',
    'commen',
]

然后重写commen/views.py:

代码语言:javascript
复制
from django.contrib.auth.decorators import login_required
from django.http import HttpResponse
from django.shortcuts import render, redirect
from commen.forms import CommentForm
from commen.models import Comment
@login_required(login_url='/userprofile/login/')
def post_comment(request):
    # 处理POST请求
    if request.user.id==5:
        comments = Comment.objects.all()
    else:
        comments = Comment.objects.filter(user=request.user)
    if request.method == 'POST':
        comment_form = CommentForm(request.POST)
        if comment_form.is_valid():
            new_comment = comment_form.save(commit=False)
            new_comment.user = request.user
            new_comment.save()
            return redirect('commen:post_comment')
        else:
            return HttpResponse("表单内容有误,请重新填写。")

    else:
        checkmobile = checkMobile(request)
        context = {'comments': comments ,'checkmobile': checkmobile}
        return render(request, 'comment/comment.html',context)

再重写commen/admin.py:

代码语言:javascript
复制
from django.contrib import admin

from .models import Comment

# 注册ArticlePost到admin中
admin.site.register(Comment)

新建commen/forms.py并写入:

代码语言:javascript
复制
from django import forms

from commen.models import Comment


class CommentForm(forms.ModelForm):
    class Meta:
        model = Comment
        fields = ['body']

接着修改commen/models.py:

代码语言:javascript
复制
from django.contrib.auth.models import User
from django.db import models

class Comment(models.Model):

    user = models.ForeignKey(
        User,
        on_delete=models.CASCADE,
        related_name='comments',
    )
    body = models.TextField()
    created = models.DateTimeField(auto_now_add=True)

    class Meta:
        ordering = ('created',)

    def __str__(self):
        return self.body[:20]

再新建commen/urls.py并写入:

代码语言:javascript
复制
from django.urls import path
from . import views

app_name = 'comments'

urlpatterns = [
    path('post-comment/', views.post_comment, name='post_comment'),
]

修改mysite/urls.py:

代码语言:javascript
复制
path('comment/', include('commen.urls', namespace='commen')),

然后新建templates/comment文件夹 再创建templates/comment/comment.html并写入:

代码语言:javascript
复制
{% extends "base.html" %}
{% load static %}
{% block title %}
comments
{% endblock title %}
{% block  content %}
{% if user.is_authenticated %}
<div class="container">
<br>
<div>
    <form action="." method="post">
        {% csrf_token %}
        <div class="form-group">
            <label for="body">
                <strong>
                    Post a comment:
                </strong>
            </label>
            <textarea maxlength="100" type="text" class="form-control" id="body" name="body" rows="2"></textarea>
        <strong> </strong><hr>
        <span onclick="add('\u263A')" width="22" height="22">&#9786;</span>
        <span onclick="add('\u263B')" width="22" height="22">&#9787;</span>
        <span onclick="add('\u273F')" width="22" height="22">&#10047;</span>
        <span onclick="add('\u2764')" width="22" height="22">&#10084;</span>
        <span onclick="add('\uFFFD')" width="22" height="22">&#65533;</span>
        <span onclick="add('\u26A1')" width="22" height="22">&#9889;</span>
        <span onclick="add('\u266B')" width="22" height="22">&#9835;</span>
        <span onclick="add('\u2693')" width="22" height="22">&#9875;</span>
        <span onclick="add('\u2713')" width="22" height="22">&#10003;</span><br>
        <span onclick="add('\u2648')" width="22" height="22">&#9800;</span>
        <span onclick="add('\u2649')" width="22" height="22">&#9801;</span>
        <span onclick="add('\u2651')" width="22" height="22">&#9809;</span>
        <span onclick="add('\u272A')" width="22" height="22">&#10026;</span>
        <span onclick="add('\u2605')" width="22" height="22">&#9733;</span>
        <span onclick="add('\u265B')" width="22" height="22">&#9819;</span>
        <span onclick="add('\u2658')" width="22" height="22">&#9816;</span>
        <span onclick="add('\u265A')" width="22" height="22">&#9818;</span>
        </div>
        <button type="submit" class="btn btn-primary">send</button>
    </form>
</div>
<br>
<div>
{% for comment in comments %}
    <hr>
    <p>
        <span style="color: green">
            {{ comment.created|date:"Y-m-d H:i:s" }}
        </span>
        <pre style="font-family: inherit; font-size: 1em;white-space: pre-wrap;word-wrap: break-word;">{{ comment.body|safe }}</pre>
    </p>
{% endfor %}
</div>
</div>
{% else %}
<br>

<h5 class="row justify-content-center">
    please<a href="{% url 'userprofile:login' %}">Login</a>
</h5>
<br>
{% endif%}
<script>
    function add(value){
    document.getElementById('body').value += (value);
    }
</script>
{% endblock content %}

修改header.html

代码语言:javascript
复制
...
<style>
.material-icons.md-18 { font-size: 18px; }
.material-icons.md-blue { color: #66ccff; }
</style>
<style>
#divcss2 img{ border-radius:23%}
</style>
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
<div id="divcss2"><img src="/img/my_ico.jpg" height="36" width="36"></div>
   <a class="navbar-brand" href="#">My Site</a>
  <div class="container">
    <a class="navbar-brand" href="#"></a>
     <ul class="navbar-nav">
         <li class="nav-item">
           <a class="nav-link" href="/"><i class="material-icons md-18 md-blue">home</i>Home</a>
         </li>
         <li class="nav-item">
           <a class="nav-link" href="{% url 'article:article_list' %}"><i class="material-icons md-18">book</i>Article</a>
         </li>
         <li class="nav-item">
             <a class="nav-link" href="{% url 'article:article_create' %}">New</a>
         </li>
         <li class="nav-item">
           <a class="nav-link" href="{% url 'commen:post_comment' %}">comment</a>
         </li>
         {% if user.is_authenticated %}
           <li class="nav-item dropdown">
               ...
     </ul>
   </div>
 </div>
</nav>

再修改headerr.html

代码语言:javascript
复制
...
<style>
.material-icons.md-18 { font-size: 18px; }
.material-icons.md-blue { color: #66ccff; }
</style>
<style>
#divcss2 img{ border-radius:23%}
</style>
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
<div id="divcss2"><img src="/img/my_ico.jpg" height="36" width="36"></div>
   <a class="navbar-brand" href="#">My Site</a>
   <div class="container">
     <a class="navbar-brand" href="#"></a>
     <ul class="navbar-nav">
         <li class="nav-item">
           <a class="nav-link" href="{% url 'article:article_list' %}"><i class="material-icons md-18">book</i>Article</a>
         </li>
         <li class="nav-item">
           <a class="nav-link" href="{% url 'commen:post_comment' %}">comment</a>
         </li>
         {% if user.is_authenticated %}
           <li class="nav-item dropdown">
               <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                 {{ user.username }}
               </a>
               ...
     </ul>
   </div>
 </div>
</nav>

最后运行服务器(python manage.py runserver)后可以查看效果。 进入到 manage.py同级目录下输入:

代码语言:javascript
复制
python manage.py makemigrations

然后迁移到数据库中

代码语言:javascript
复制
python manage.py migrate
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-06-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档