一、创建项目和应用

​ 在Pycharm中用Django模板创建一个工程文件

创建项目
    python manage.py startproject 项目名 .
创建应用
    python manage.py startapp 应用名

二、配置项目名中的settings文件

#1、添加应用
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'blog', #将添加的应用添加在此处
]
#2、设置编码为中文
LANGUAGE_CODE = 'zh-Hans'  # 'en-us'
#3、设置时区
TIME_ZONE = 'Asia/Shanghai'  #'UTC'
USE_I18N = True
USE_L10N = True
#4、改为False时区才能生效
USE_TZ =  False #True

​ 完成上述步骤可以启动Django服务器看看能否运行出初始界面

python manage.py runserver

三、添加数据模型

在应用程序(blog)的models.py文件中添加数据模型

from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
# Create your models here.

class BlogArticles(models.Model):
    title = models.CharField(max_length=300)
    author = models.ForeignKey(User, on_delete=models.CASCADE, related_name="blog_posts")
    body = models.TextField()
    publish = models.DateTimeField(default=timezone.now)

    class Meta:
        ordering = ("-publish",)

        def __str__(self):
            return self.title

数据模型添加后执行如下命令

python manage.py makemigrations

接着执行数据迁移命令

python manage.py migrate

四、创建超级用户

python manage.py createsuperuser
    用户名:admin
    邮箱:admin@admin.com
    密码:django1234

刷新浏览器,使用上述账号和密码进行登录

五、数据模型注册

在应用程序名(blog)下的admin.py中注册数据模型类

from django.contrib import admin
from .models import BlogArticles    #导入数据模型类到当前文件夹
admin.site.register(BlogArticles)   #将该类注册到admin中

刷新浏览器,出现博客功能,优化数据注册模型:

from django.contrib import admin
from .models import BlogArticles    #导入数据模型类到当前文件夹

class BlogArticlesAdmin(admin.ModelAdmin):
    list_display = ("title", "author", "publish")
    list_filter = ("publish", "author")
    search_fields = ("title", "body")
    # raw_id_fields = ("author") #这一句添加感觉有点问题,在后面刷新后重新写博客author哪儿不能选择了,造成博客生成不了,注释了即可
    date_hierarchy = "publish"
    ordering = ['-publish', 'author']
admin.site.register(BlogArticles, BlogArticlesAdmin)    #将该类注册到admin中

六、显示博客标题

(1)添加视图

​ 在./blog/views.py文件中添加基于视图的函数(还有一种视图是基于类的视图)

from django.shortcuts import render
from .models import BlogArticles

def blog_title(request):
    blogs = BlogArticles.objects.all()
    return render(requset, "blog/titles.html", {"blogs": blogs})

(2)添加模板

​ 在templates中添加基础模板base.html文件,内容如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta http-equiv="X-UA-Compatible" content="IE=Edge">
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>{% block title %}{% endblock %}</title>
    <link rel="stylesheet" href="https://github.com/necolas/normalize.css/blob/master/normalize.css">
    <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css">
</head>
<body>
    <div class="container">
        {% block content %}
        {% endblock %}
    </div>
<script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.js"></script>
<script src="https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</body>
</html>

​ 在./templates/blog/下面创建titles.html, 添加如下内容:

{% extends "base.html" %}
{% block title %}blog titles{% endblock %}
{% block content %}
    <div class="row text-center vertical-middle-sm">
        <h1>我的博客</h1>
    </div>
    <div class="row">
        <div class="col-xs-12 col-md-8">
            <ul>
            {% for blog in blogs %}
              <li>{{ blog.title }}</li>
            {% endfor %}
            </ul>
        </div>
        <div class="col-xs-6 col-md-4">
            <h2>广告</h2>
            <p>跟老齐学:www.itdiffer.com</p>
            <img width="200px" src="           https://raw.githubusercontent.com/qiwsir/DjangoPracticeProject/master/python-book2.png">
        </div>
    </div>
{% endblock %}

(3)配置路由

路由需要配置两个地方的路由

# 配置 ./mystie/urls.py
from django.contrib import admin
from django.urls import path, include

urlpatterns=[
    path('admin/',admin.site.urls),
    path('blog/', inclue('blog.urls'))
]

# 上面用到的blog.urls还没有创建在./blog/下创建urls.py 并添加如下内容:
from django.urls import path
from . import views
urlpatterns = [
    path('', views.blog_title), #此处将函数视图添加进来
]

七、显示博客内容

(1)文章标题设置超链接

​ 首先需要在titels.html中显示标题的部分做相应修改。即给标题添加超链接,如下:

{% for blog in blogs %}
    <li>
        <a href="{{blog.id}}">{{blog.title}}</a>
    </li>
{% endfor %}

(2)添加视图

​ 编辑./blog/view.py,增加响应查看文章详情的请求函数blog_article()

def blog_article(request, article_id):
    article = BlogArticles.objects.get(id=article_id)
    pub = article.publish
    return render(request, "blog/content.html", {"article":article, "publish":pub})

(3)添加模板

​ 在./templates/blog/下面创建content.html, 添加如下内容:

{% extends "base.html" %}
{% block title %}blog article{% endblock %}
{% block content %}
    <div class="row text-center vertical-middle-sm">
        <h1>{{article.title}}</h1>
    </div>
    <div class="row">
        <div class="col-xs-12 col-md-8">
            <p class="text-center">
                <span>
                  {{article.author.username}}
                </span>
                <span style="margin-lefet:20px">
                    {{publish}}
                </span>
            </p>
            <div>
                {{article.body}
            </div>
        </div>
        <div class="col-xs-6 col-md-4">
            <h2>广告</h2>
            <p>跟老齐学:www.itdiffer.com</p>
            <img width="200px" src="           https://raw.githubusercontent.com/qiwsir/DjangoPracticeProject/master/python-book2.png">
        </div>
    </div>
{% endblock %}

(4)配置路由

# ./mystie/urls.py 不需要修改

# ./blog/urls.py 添加博客内容也的路由
from django.urls import path
from . import views
urlpatterns = [
    path('', views.blog_title), #此处将函数视图添加进来
    path('<int:article_id>', views.blog_article),
]

(4)处理异常

from django.shortcuts import render, get_object_or_404
from .models. import BlogArticles
def blog_article(request, article_id):
    #article = BlogArticles.objects.get(id=article_id)
    article = get_object_or_404(BlogArticles, id=article_id)
    pub = article.publish
    return render(request, "blog/content.html", {"article":article, "publish":pub})

Django学习---多人博客项目(1)的更多相关文章

  1. django学习笔记——搭建博客网站

    1. 配置环境,创建django工程 虚拟环境下建立Django工程,即创建一个包含python脚本文件和django配置文件的目录或者文件夹,其中manage.py是django的工程管理助手.(可 ...

  2. [python][django学习篇][15]博客侧栏--自定义模板标签

    我们的博客侧边栏有四项内容:最新文章.归档.分类和标签云. 这些内容相对比较固定,且在各个页面都会显示,如果像文章列表或者文章详情一样,从视图函数中获取然后传递给模板,则每个页面对应的视图函数里都要写 ...

  3. 【完全开源】Django多人博客系统——支持MarkDown和tinyMce

    目录 说明 功能 如何使用 说明 这是一个用Django开发的多人博客系统,功能简单,但完全满足公司内部或个人的博客使用需求.支持普通富文本编辑器(tinyMCE)和MarkDown编辑器 由于嫌弃D ...

  4. django博客项目1.环境搭建

    安装 Python Windows 下安装 Python 非常简单,去 Python 官方网站找到 Python 3 的下载地址,根据你的系统选择 32 位或者 64 位的安装包,下载好后双击安装即可 ...

  5. Python Web开发:Django+BootStrap实现简单的博客项目

    创建blog的项目结构 关于如何创建一个Django项目,请查看[Python Web开发:使用Django框架创建HolleWorld项目] 创建blog的数据模型 创建一个文章类 所有开发都是数据 ...

  6. Django之BBS博客项目

    一.登陆功能(验证码) from geetest import GeetestLib from django.contrib import auth #使用极验滑动验证码的登陆 def login(r ...

  7. Django——博客项目

    博客项目 目前的目标是构建一个基于Django的前后端完整的博客系统,首先对项目流程整理如下: 1. 分析需求 1.1. 基于用户认证组件和Ajax实现登录验证 图形验证码核心代码: 模板: < ...

  8. Django day17 博客项目(一)

    一: 博客项目需求分析 首页(显示文章) 文章详情 点赞, 点踩 文章评论 字评论 评论的展示 登录功能(图片验证码) 注册功能(基于form验证,ajax) 个人站点(不同人不同样式,文章过滤) 后 ...

  9. 9.28 Django博客项目(一)

    2018-9-28 17:37:18 今天把博客项目 实现了注册和添加图片的功能! 放在了自己的github上面 源码! https://github.com/TrueNewBee/bbs_demo ...

随机推荐

  1. Tornado的XSRF防范

    XSRF XSRF即为跨站请求伪造 这个漏洞利用了浏览器的一个允许恶意攻击者在受害者网站注入脚本使未授权请求代表一个已登录用户的安全漏洞. 了解XSRF 当一个网站的图片SRC属性为另一个网站的链接时 ...

  2. mnist数据集tensorflow实现

    TensorFlow——CNN实现MNIST手写体识别 2019年04月08日 21:46:19 星空Ice_ 阅读数 83   文章目录 TensorFlowCNN实现MNIST 1,数据集 2,回 ...

  3. git仓库管理

    删除本地仓库当前关联的无效远程地址,再为本地仓库添加新的远程仓库地址 git remote -v //查看git对应的远程仓库地址 git remote rm origin //删除关联对应的远程仓库 ...

  4. 用Spring中的ResponseEntity文件批量压缩下载

    我看了很多网上的demo,先生成ZIP压缩文件,然后再下载. 我这里是生成ZIP文件流 进行下载.(核心代码没多少,就是一些业务代码) @RequestMapping(value = "/& ...

  5. Python模块进阶、标准库、扩展库

    模块进阶 Python有一套很有用的标准库(standard library).标准库会随着Python解释器,一起安装在你的电脑中的. 它是Python的一个组成部分.这些标准库是Python为你准 ...

  6. 洛谷 P1220 关路灯(区间dp,前缀和)

    传送门 解题思路 先明确一下题意,c指的是路灯的编号而不是位置. 然后根据贪心,在从点i去关点j的路灯时,所有经过的路灯都会随手关掉(不耗时间),所以我们可以确定,若i点和j点的路灯已经关闭,那么区间 ...

  7. Invalid bound statement (not found): com.xxxx.dao.other.LoginDao.getUser"

    原来是能正常运行的,后想把登录相关的调整一下目录,对应登录的文件都调整到了other下边,启动服务,请求时报错: Invalid bound statement (not found): com.xx ...

  8. 201771010123汪慧和《面向对象程序设计Java》第十三周实验总结

     一.理论部分 1.GUI为用户提供交互式的图形化操作界面. (1)提供了程序的外观和感觉.(2)程序利用图形用户界面接受用户的输入,向用户输出程序运行的结果. 2.Java有专门的类库生成各种标准图 ...

  9. JavaSE--java是值传递还是引用传递

    引用是已定义的变量的别名. 按引用传递就是一个变量使用两个名称. 两个变量在内存中的地址都是一样的. 按值传递, 传递的是值的拷贝. C++中可以通过传引用来改变传入的参数的值.在C++中可以通过以下 ...

  10. scala def方法时等号和括号使用说明笔记

    scala定义方法时会指定入参和返回类型(无返回类型时对应Unit,即java和C中的void模式). 1.有入参,有返回类型时,scala具有类型推导功能,以下两种表达方式效果一样.但根据scala ...