Django开发的简易留言板案例详解


Posted in Python onDecember 04, 2018

本文实例讲述了Django开发的简易留言板。分享给大家供大家参考,具体如下:

Django在线留言板小练习

环境

ubuntu16.04 + python3 + django1.11

1、创建项目

django-admin.py startproject message

进入项目message

2、创建APP

python manager.py startapp guestbook

项目结构

.
├── guestbook
│   ├── admin.py
│   ├── apps.py
│   ├── __init__.py
│   ├── migrations
│   │   └── __init__.py
│   ├── models.py
│   ├── tests.py
│   └── views.py
├── manage.py
└── message
    ├── __init__.py
    ├── __pycache__
    │   ├── __init__.cpython-35.pyc
    │   └── settings.cpython-35.pyc
    ├── settings.py
    ├── urls.py
    └── wsgi.py

4 directories, 14 files

需要做的事:

配置项目setting 、初始化数据库、配置url 、编写views 、创建HTML文件

项目配置

打开message/settings.py

设置哪些主机可以访问,*代表所有主机

ALLOWED_HOSTS = ["*"]
INSTALLED_APPS = [
  'django.contrib.admin',
  'django.contrib.auth',
  'django.contrib.contenttypes',
  'django.contrib.sessions',
  'django.contrib.messages',
  'django.contrib.staticfiles',
  'guestbook',  #刚刚创建的APP,加入到此项目中
]
#数据库默认用sqlite3,后期可以换成MySQL或者SQL Server等
TIME_ZONE = 'PRC' #时区设置为中国

创建数据库字段

#encoding: utf-8
from django.db import models
class Message(models.Model):
  username=models.CharField(max_length=256)
  title=models.CharField(max_length=512)
  content=models.TextField(max_length=256)
  publish=models.DateTimeField()
  #为了显示
  def __str__(self):
    tpl = '<Message:[username={username}, title={title}, content={content}, publish={publish}]>'
    return tpl.format(username=self.username, title=self.title, content=self.content, publish=self.publish)

初始化数据库

# 1. 创建更改的文件
root@python:/online/message# python3 manage.py makemigrations
Migrations for 'guestbook':
 guestbook/migrations/0001_initial.py
  - Create model Message
# 2. 将生成的py文件应用到数据库
root@python:/online/message# python3 manage.py migrate
Operations to perform:
 Apply all migrations: admin, auth, contenttypes, guestbook, sessions
Running migrations:
 Applying contenttypes.0001_initial... OK
 Applying auth.0001_initial... OK
 Applying admin.0001_initial... OK
 Applying admin.0002_logentry_remove_auto_add... OK
 Applying contenttypes.0002_remove_content_type_name... OK
 Applying auth.0002_alter_permission_name_max_length... OK
 Applying auth.0003_alter_user_email_max_length... OK
 Applying auth.0004_alter_user_username_opts... OK
 Applying auth.0005_alter_user_last_login_null... OK
 Applying auth.0006_require_contenttypes_0002... OK
 Applying auth.0007_alter_validators_add_error_messages... OK
 Applying auth.0008_alter_user_username_max_length... OK
 Applying guestbook.0001_initial... OK
 Applying sessions.0001_initial... OK

配置url

设置项目message/urls.py

from django.conf.urls import url,include #添加了include
from django.contrib import admin
urlpatterns = [
  url(r'^admin/', admin.site.urls),
  url(r'^guestbook/', include('guestbook.urls',namespace='guestbook')),  #表示在url地址中所有guestbook的都交给guestbook下面的url来处理,后面的逗号不要省略
]

设置APP的url

如果是初次创建APP,urls.py在APP中一般不存在,创建即可

vim guestbook/urls.py

# 内容如下
from django.conf.urls import url
from . import views
urlpatterns = [
  url(r'^index/',views.index,name='index'),  #不要忘了逗号
]

编写views

编辑APP中的views.py

from django.shortcuts import render
from django.http import HttpResponseRedirect
from . import models
# Create your views here.
def index(request):
  messages = models.Message.objects.all()
  return render(request, 'guestbook/index.html', {'messages' : messages})

编写HTML文件

创建APP/templates/guestbook/index.html目录及文件

使用bootstrap美化了

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>留言板</title>
    <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="external nofollow" rel="external nofollow" crossorigin="anonymous">
  </head>
  <body>
    <table class="table table-striped table-bordered table-hover table-condensed">
      <thead>
        <tr class="danger">
          <th>留言时间</th>
          <th>留言者</th>
          <th>标题</th>
          <th>内容</th>
        </tr>
      </thead>
      <tbody>
        {% if messages %}
          {% for message in messages %}
            <tr class="{% cycle 'active' 'success' 'warning' 'info' %}">
              <td>{{ message.publish|date:'Y-m-d H:i:s' }}</td>
              <td>{{ message.username }}</td>
              <td>{{ message.title }}</td>
              <td>{{ message.content }}</td>
            </tr>
          {% endfor %}
        {% else %}
          <tr>
            <td colspan="4">无数据</td>
          </tr>
        {% endif %}
      </tbody>
    </table> 
    <a class="btn btn-xs btn-info" href="/guestbook/create/" rel="external nofollow" >去留言</a>
  </body>
</html>

调试index页面

python manage.py runserver 0.0.0.0:99

打开浏览器访问http://开发机器ip地址:99/guestbook/index/

Django开发的简易留言板案例详解

留言展示页面成功

创建留言页面

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>留言</title>
    <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="external nofollow" rel="external nofollow" crossorigin="anonymous">
  </head>
  <body>
    <!-- 我是注释 -->
    <h3>留言</h3> <!--h1-> h6-->
    <!--method: POST /GET -->
    <form action="/guestbook/save/" method="POST" novalidate="novalidate">
    {% csrf_token %}
      <table class="table table-striped table-bordered table-hover table-condensed">
        <label>用户名:</label> <input type="text" name="username" placeholder="用户名" /> <br /><br />
        <label>标 题:</label> <input type="text" name="title" placeholder="标题" /><br /><br />
        <label>内 容:</label> <textarea name="content" placeholder="内容"> </textarea><br /><br />
      </table>
      <input class="btn btn-success" type="submit" value="留言"/>
    </form>
  </body>
</html>

配置APP下的url

vim guestbook/urls.py

urlpatterns = [
  url(r'^index/',views.index,name='index'),  #不要忘了逗号
  url(r'^create/$', views.create, name='create'),
  url(r'^save/$', views.save, name='save'), 
]

编辑views.py

#先导入时间模块
import datetime
#添加create、save
def create(request):
  return render(request, 'guestbook/create.html')
def save(request):
  username = request.POST.get("username")
  title = request.POST.get("title")
  content = request.POST.get("content")
  publish = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
  message = models.Message(title=title, content=content, username=username, publish=publish)
  message.save()
  return HttpResponseRedirect('/guestbook/index/')

OK,再次运行,enjoy it!

Django开发的简易留言板案例详解

希望本文所述对大家基于Django框架的Python程序设计有所帮助。

Python 相关文章推荐
使用Python获取CPU、内存和硬盘等windowns系统信息的2个例子
Apr 15 Python
在Docker上开始部署Python应用的教程
Apr 17 Python
python和opencv实现抠图
Jul 18 Python
python递归实现快速排序
Aug 18 Python
pycharm中使用anaconda部署python环境的方法步骤
Dec 19 Python
python django model联合主键的例子
Aug 06 Python
解决python3 安装不了PIL的问题
Aug 16 Python
Pytorch反向求导更新网络参数的方法
Aug 17 Python
Python传递参数的多种方式(小结)
Sep 18 Python
使用sklearn的cross_val_score进行交叉验证实例
Feb 28 Python
python 5个实用的技巧
Sep 27 Python
python调试工具Birdseye的使用教程
May 25 Python
对python的bytes类型数据split分割切片方法
Dec 04 #Python
Python 从相对路径下import的方法
Dec 04 #Python
浅谈python中str字符串和unicode对象字符串的拼接问题
Dec 04 #Python
Python推导式简单示例【列表推导式、字典推导式与集合推导式】
Dec 04 #Python
对web.py设置favicon.ico的方法详解
Dec 04 #Python
对python 命令的-u参数详解
Dec 03 #Python
python 接收处理外带的参数方法
Dec 03 #Python
You might like
自制汽车收音机天线:收听广播的技巧和方法
2021/03/02 无线电
一个PHP模板,主要想体现一下思路
2006/12/25 PHP
php函数传值的引用传递注意事项分析
2016/06/25 PHP
PHPUnit + Laravel单元测试常用技能
2019/11/06 PHP
PHP如何解决微信文章图片防盗链
2020/12/09 PHP
jquery api参考 visualjquery 中国线路 速度快
2007/11/30 Javascript
让低版本浏览器支持input的placeholder属性(js方法)
2013/04/03 Javascript
JS对img标签进行优化使用onerror显示默认图像
2014/04/24 Javascript
js单独获取一个checkbox看其是否被选中
2014/09/22 Javascript
jQuery中closest()函数用法实例
2015/01/07 Javascript
AngularJS  ng-table插件设置排序
2016/09/21 Javascript
AngularJS解决ng界面长表达式(ui-set)的方法分析
2016/11/07 Javascript
js 判断数据类型的几种方法
2017/01/13 Javascript
jQuery - AJAX load() 实例用法详解
2019/08/27 jQuery
进一步探究Python中的正则表达式
2015/04/28 Python
python基于socket实现网络广播的方法
2015/04/29 Python
python+opencv实现霍夫变换检测直线
2020/10/23 Python
python3使用QQ邮箱发送邮件
2020/05/20 Python
在Python中COM口的调用方法
2019/07/03 Python
python打印文件的前几行或最后几行教程
2020/02/13 Python
使用python3 实现插入数据到mysql
2020/03/02 Python
戴尔加拿大官网:Dell加拿大
2016/09/17 全球购物
罗马尼亚购物网站:Vivantis.ro
2019/07/20 全球购物
CHARLES & KEITH台湾官网:新加坡时尚品牌
2019/07/30 全球购物
在Java开发中如何选择使用哪种集合类
2016/08/09 面试题
建筑装饰学院室内设计专业个人自我评价
2013/12/07 职场文书
优秀求职信范文分享
2014/01/26 职场文书
校园之声广播稿
2014/01/31 职场文书
学习两会精神心得范文
2014/03/17 职场文书
会计学自荐信
2014/06/03 职场文书
四查四看整改措施
2014/09/19 职场文书
2014教师教育实践活动对照检查材料思想汇报
2014/09/21 职场文书
八年级作文之我的母亲
2019/12/10 职场文书
Nginx+Tomcat负载均衡集群的实现示例
2021/10/24 Servers
鸿蒙3.0体验感怎么样? 鸿蒙3.0系统评测向
2022/08/14 数码科技
python如何利用cv2.rectangle()绘制矩形框
2022/12/24 Python