Django项目_博客系统

前端:

1、页面框架加载出就加载JavaScript

2、阻止表单提交(当然也可以通过后端用form、modelform进行表单验证)

博客园中的文章提交按钮

body中的

<input type="submit" class="btn btn-primary" value="保 存" onclick="return CancelPost();">

script中的

function CancelPost() {
            var title = $(‘#title‘).val();
            var abstract = $(‘#abstract‘).val();
            var content = editor.html();    //心疼我自己
            var flag = 0;
        var _radio = document.getElementById("myForm").getElementsByClassName("category");//获取单选框集合
        for (var i = 0; i < _radio.length-1; i++)
            if (_radio[i].checked == true) {
                flag = 1;
                break;
            }
        if (!flag) {
            alert("请选择文章分类!");
            return false;
        }
        if(title&&abstract&&content){
                return true

            }else{
                alert(‘标题、摘要、内容不能为空‘);
                return false;
            }
        }

  

3、JavaScript中判断单选框是否被选中(当然也可以通过后端用form、modelform进行表单验证)

function CancelPost() {
            var title = $(‘#title‘).val();
            var abstract = $(‘#abstract‘).val();
            var content = editor.html();    //kindeditor获取文本内容+赋予文本内容的方法
            var flag = 0;
        var _radio = document.getElementById("myForm").getElementsByClassName("category");//获取单选框集合
        for (var i = 0; i < _radio.length-1; i++)
            if (_radio[i].checked == true) {
                flag = 1;
                break;
            }
        if (!flag) {
            alert("请选择文章分类!");
            return false;
        }
        if(title&&abstract&&content){
                return true

            }else{
                alert(‘标题、摘要、内容、分类不能为空‘);
                return false;
            }
        }

KindEditor方面

4、获取文本框中的内容+赋默认值

5、前端的配置

var editor;
        KindEditor.ready(function (K) {
            editor = K.create(‘textarea[name="content"]‘, {
                resizeType: 1,      // 2或1或0,2时可以拖动改变宽度和高度,1时只能改变高度,0时不能拖动。
                uploadJson: ‘/backend/upload/‘,      //上传到服务器端的路径 xxx.html
                fileManagerJson: ‘/backend/file_manager/‘,   //文件空间管理
                allowFileManager:true,      // true时显示浏览远程服务器按钮
                extraFileUploadParams : {
                    csrfmiddlewaretoken: "{{ csrf_token }}"     //csrf_token
                },
                filePostName: ‘filename‘    //发送的文件名字

            });
        });

后端:

KindEditor方面

1、后端保存前端发来的东西并在前端显示

@auth
def upload(request):
    """
    kindeditor上传文件
    :param request:
    :return:
    """
    print(request.GET.get(‘dir‘))       # 可以用来判断发来的是什么类型(img,flash...)的东西
    file = request.FILES.get(‘filename‘)
    file_name = file.name
    user = request.session[‘username‘]
    path = os.path.join(‘static/home/‘+user+‘/data/‘,file_name)
    with open(path,‘wb‘) as e:
        for i in file.chunks():
            e.write(i)
    dic = {
        ‘error‘: 0,
        ‘url‘: ‘/‘+path,
        ‘message‘: ‘啦啦啦...‘    # 其实我也不知道这个是干啥的
    }
    return HttpResponse(json.dumps(dic))

2、文件的空间管理

 1 @auth
 2 def file_manager(request):
 3     ‘‘‘
 4     个人文件空间
 5     :param request:
 6     :return:
 7     ‘‘‘
 8     user = request.session[‘username‘]
 9     dic = {}
10     root_path = ‘static/home/‘+user+‘/‘
11     static_root_path = ‘/static/home/‘+user+‘/‘
12     request_path = request.GET.get(‘path‘)
13     if request_path:
14         abs_current_dir_path = os.path.join(root_path, request_path)
15         move_up_dir_path = os.path.dirname(request_path.rstrip(‘/‘))
16         dic[‘moveup_dir_path‘] = move_up_dir_path + ‘/‘ if move_up_dir_path else move_up_dir_path
17
18     else:
19         abs_current_dir_path = root_path
20         dic[‘moveup_dir_path‘] = ‘‘
21
22     dic[‘current_dir_path‘] = request_path
23     dic[‘current_url‘] = os.path.join(static_root_path, request_path)
24
25     file_list = []
26     for item in os.listdir(abs_current_dir_path):
27         abs_item_path = os.path.join(abs_current_dir_path, item)
28         a, exts = os.path.splitext(item)
29         is_dir = os.path.isdir(abs_item_path)
30         if is_dir:
31             temp = {
32                 ‘is_dir‘: True,
33                 ‘has_file‘: True,
34                 ‘filesize‘: 0,
35                 ‘dir_path‘: ‘‘,
36                 ‘is_photo‘: False,
37                 ‘filetype‘: ‘‘,
38                 ‘filename‘: item,
39                 ‘datetime‘: time.strftime(‘%Y-%m-%d %H:%M:%S‘, time.gmtime(os.path.getctime(abs_item_path)))
40             }
41         else:
42             temp = {
43                 ‘is_dir‘: False,
44                 ‘has_file‘: False,
45                 ‘filesize‘: os.stat(abs_item_path).st_size,
46                 ‘dir_path‘: ‘‘,
47                 ‘is_photo‘: True if exts.lower() in [‘.jpg‘, ‘.png‘, ‘.jpeg‘] else False,
48                 ‘filetype‘: exts.lower().strip(‘.‘),
49                 ‘filename‘: item,
50                 ‘datetime‘: time.strftime(‘%Y-%m-%d %H:%M:%S‘, time.gmtime(os.path.getctime(abs_item_path)))
51             }
52
53         file_list.append(temp)
54     dic[‘file_list‘] = file_list
55     return HttpResponse(json.dumps(dic))

我的系统上用的

import os
import time
import json
def file_manager(request):
    # """
    # 文件管理
    # :param request:
    # :return:
    # {
    #     moveup_dir_path:
    #     current_dir_path:
    #     current_url:
    #     file_list: [
    #         {
    #             ‘is_dir‘: True,
    #             ‘has_file‘: True,
    #             ‘filesize‘: 0,
    #             ‘dir_path‘: ‘‘,
    #             ‘is_photo‘: False,
    #             ‘filetype‘: ‘‘,
    #             ‘filename‘: xxx.png,
    #             ‘datetime‘: time.strftime(‘%Y-%m-%d %H:%M:%S‘, time.gmtime(os.path.getctime(abs_item_path)))
    #         },
    #         {
    #             ‘is_dir‘: True,
    #             ‘has_file‘: True,
    #             ‘filesize‘: 0,
    #             ‘dir_path‘: ‘‘,
    #             ‘is_photo‘: False,
    #             ‘filetype‘: ‘‘,
    #             ‘filename‘: xxx.png,
    #             ‘datetime‘: time.strftime(‘%Y-%m-%d %H:%M:%S‘, time.gmtime(os.path.getctime(abs_item_path)))
    #         }
    #     ]
    #
    # }
    #
    #
    # """
    dic = {}
    root_path = ‘C:/Users/Administrator/PycharmProjects/day24/static/‘
    static_root_path = ‘/static/‘
    request_path = request.GET.get(‘path‘)
    if request_path:
        abs_current_dir_path = os.path.join(root_path, request_path)
        move_up_dir_path = os.path.dirname(request_path.rstrip(‘/‘))
        dic[‘moveup_dir_path‘] = move_up_dir_path + ‘/‘ if move_up_dir_path else move_up_dir_path

    else:
        abs_current_dir_path = root_path
        dic[‘moveup_dir_path‘] = ‘‘

    dic[‘current_dir_path‘] = request_path
    dic[‘current_url‘] = os.path.join(static_root_path, request_path)

    file_list = []
    for item in os.listdir(abs_current_dir_path):
        abs_item_path = os.path.join(abs_current_dir_path, item)
        a, exts = os.path.splitext(item)
        is_dir = os.path.isdir(abs_item_path)
        if is_dir:
            temp = {
                ‘is_dir‘: True,
                ‘has_file‘: True,
                ‘filesize‘: 0,
                ‘dir_path‘: ‘‘,
                ‘is_photo‘: False,
                ‘filetype‘: ‘‘,
                ‘filename‘: item,
                ‘datetime‘: time.strftime(‘%Y-%m-%d %H:%M:%S‘, time.gmtime(os.path.getctime(abs_item_path)))
            }
        else:
            temp = {
                ‘is_dir‘: False,
                ‘has_file‘: False,
                ‘filesize‘: os.stat(abs_item_path).st_size,
                ‘dir_path‘: ‘‘,
                ‘is_photo‘: True if exts.lower() in [‘.jpg‘, ‘.png‘, ‘.jpeg‘] else False,
                ‘filetype‘: exts.lower().strip(‘.‘),
                ‘filename‘: item,
                ‘datetime‘: time.strftime(‘%Y-%m-%d %H:%M:%S‘, time.gmtime(os.path.getctime(abs_item_path)))
            }

        file_list.append(temp)
    dic[‘file_list‘] = file_list
    return HttpResponse(json.dumps(dic))

更多请见24周第17章节 KindEditor的使用

时间: 2024-10-10 00:55:39

Django项目_博客系统的相关文章

巨杉Tech | 十分钟快速搭建 Wordpress 博客系统

介绍很多互联网应用程序开发人员第一个接触到的网站项目就是博客系统.而全球使用最广的Wordpress常常被用户用来快速搭建个人博客网站.默认情况下,Wordpress一般在后台使用MySQL关系型数据库存储所有的博文及回复.本文将展示如何使用 SequoiaDB 巨杉分布式数据库替换MySQL,成为Wordpress博客系统的后台关系型数据库. 通过阅读本文,用户可以了解到如何使用SequoiaDB巨杉数据库的MySQL实例无缝替换标准MySQL数据库.SequoiaDB巨杉数据库允许用户在不更

Python课程的期末项目--实现了一个及其简单的个人博客系统

目录 1. 项目简介 1.1 本项目博客地址 1.2 项目的的功能与特色 1.3 项目采取的技术栈 1.4 项目借鉴源代码的github地址或博客地址 1.5 团队成员任务分配表 2. 前期调查与需求分析 3. 项目功能架构图.主要功能流程图 4. 系统模块说明 4.1 系统中包含的模块列表 4.2 系统各模块详细描述 4.2.1 分页功能 4.2.2 标签功能 5.项目总结 5.1 系统特点 5.2 系统不足与可改进的地方 1. 项目简介 1.1 本项目博客地址 https://www.cnb

Django开发博客系统(01-前言与需求分析)

原本是跟着视频学,无奈发现视频中用到的资源找不到,于是自己买了本书来进行学习,贴上JD链接.<Django企业开发实战> 我的开发环境是win10+python3.8+django3.0.4,而书上是在linux环境下进行开发的,= =(汗),先这样学下去吧,毕竟面向百度编程.写博客也是为了督促一下自己,毕竟在家里宅着容易学着学着就玩手机去了.. 书前面还有一些入门知识,这里我就直接跳到做项目的部分了. 目标是开发一个博客系统, 需求分析: 简单来说,博客分为两个部分:读者访问部分(用户端)和

项目实战(连载):基于Angular2+Mongodb+Node技术实现的多用户博客系统教程(4)

本章主要讲什么(一句话)? <项目实战:基于Angular2+Mongodb+Node技术实现的多用户博客系统教程(4)> -- 基于Node的Express项目环境框架搭建 一.前言 从本节开始,我们将正式[多用户博客系统]的项目开发工作.首先我们先从后台Node部分开始做起,一步步带领大家完成整个博客系统的开发. 本篇将主要帮助大家把Node环境下的Express框架搭建起来,后继后台将会在这个框架上进行扩展与业务逻辑开发. 二.项目环境 Node.js: v 6.x Express: v

一个超漂亮的Java版博客系统,内置14套皮肤,已经转化为标准的Eclipse项目,直接导入即可

原文:一个超漂亮的Java版博客系统,内置14套皮肤,已经转化为标准的Eclipse项目,直接导入即可 源代码下载地址:http://www.zuidaima.com/share/1550463745002496.htm MrZhao只分享精品,话不多说,直接上图      - 为了压缩文件我把WEB-INF下面的lib包打包放在网盘下载地址:http://pan.baidu.com/s/1hqqqWOc - 把lib解压进去以后项目直接导入Eclise即可运行 - 数据库Mysql,确保一个新

博客系统项目搭建准备

一.项目背景 1999年初,由于 Cameron与Jesse共同维护的博客站点列表既有趣又易于阅读,吸引了很多人的眼球.在这种情况下,Peter Merholz宣称:"这个新鲜事物必将引起大多数人的注意.作为未来的一个常用词语,web-blog将不可避免地被简称为blog,而那些编写网络日志的人,也就顺理成章地成为blogger"博客".这代表着博客被正式命名. 8月份,Pyra发布了Blogger网站,Groksoup也投入运营,使用这些企业所提供的简单的基于互联网的工具,

博客系统项目搭建

一.maven工程的好处 1.一步构建 maven对项目构建的过程进行标准化,通过一个命令即可完成构建过程. 2.依赖管理 maven为全世界的java开发者提供了一个免费的中央仓库,在其中几乎可以找到任何的流行开源软件.通过衍生工具,我们还能对其进行快速搜索,因此maven工程不用手动导入jar包,可以通过在pom.xml中定义坐标从中央仓库自动下载,方便并且不容易出错. 3.maven的跨平台,可在window.linux上使用. 4.maven遵循规范开发有利于提高大型团队的开发效率,降低

Spring MVC+Hibernate JPA搭建的博客系统项目中所遇到的坑

标签: springmvc hibernate 2016年12月21日 21:48:035133人阅读 评论(0) 收藏 举报  分类: Spring/Spring MVC(6)  Hibernate(1)  版权声明:本文为博主原创文章,未经博主允许不得转载,如需转载,请注明文章出处为 http://www.54tianzhisheng.cn/,否则考虑法律追究责任,谢谢合作! https://blog.csdn.net/tzs_1041218129/article/details/53791

重磅回归-SSM整合进阶项目实战之个人博客系统

历经一个多月的重新设计,需求分析以及前后端开发,终于有了一定的输出:我自己实现的spring4+springmvc+mybatis3整合的进阶项目实战-个人博客系统 已然完成了,系统采用mvc三层模式进行整体的开发,涉及到技术一下子很难全部列出,其中不得不提的有:整合shiro实现登录安全认证,整合lucene实现全文信息检索,基于Spring的事件驱动模型实现业务服务模块之间的异步解耦(在RabbitMQ视频教程中我也会重提这个技术点!),爬虫框架Jsoup解析html文本中的图片,整合ued