Django学习---多人博客项目(1)
一、创建项目和应用
在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)的更多相关文章
- django学习笔记——搭建博客网站
1. 配置环境,创建django工程 虚拟环境下建立Django工程,即创建一个包含python脚本文件和django配置文件的目录或者文件夹,其中manage.py是django的工程管理助手.(可 ...
- [python][django学习篇][15]博客侧栏--自定义模板标签
我们的博客侧边栏有四项内容:最新文章.归档.分类和标签云. 这些内容相对比较固定,且在各个页面都会显示,如果像文章列表或者文章详情一样,从视图函数中获取然后传递给模板,则每个页面对应的视图函数里都要写 ...
- 【完全开源】Django多人博客系统——支持MarkDown和tinyMce
目录 说明 功能 如何使用 说明 这是一个用Django开发的多人博客系统,功能简单,但完全满足公司内部或个人的博客使用需求.支持普通富文本编辑器(tinyMCE)和MarkDown编辑器 由于嫌弃D ...
- django博客项目1.环境搭建
安装 Python Windows 下安装 Python 非常简单,去 Python 官方网站找到 Python 3 的下载地址,根据你的系统选择 32 位或者 64 位的安装包,下载好后双击安装即可 ...
- Python Web开发:Django+BootStrap实现简单的博客项目
创建blog的项目结构 关于如何创建一个Django项目,请查看[Python Web开发:使用Django框架创建HolleWorld项目] 创建blog的数据模型 创建一个文章类 所有开发都是数据 ...
- Django之BBS博客项目
一.登陆功能(验证码) from geetest import GeetestLib from django.contrib import auth #使用极验滑动验证码的登陆 def login(r ...
- Django——博客项目
博客项目 目前的目标是构建一个基于Django的前后端完整的博客系统,首先对项目流程整理如下: 1. 分析需求 1.1. 基于用户认证组件和Ajax实现登录验证 图形验证码核心代码: 模板: < ...
- Django day17 博客项目(一)
一: 博客项目需求分析 首页(显示文章) 文章详情 点赞, 点踩 文章评论 字评论 评论的展示 登录功能(图片验证码) 注册功能(基于form验证,ajax) 个人站点(不同人不同样式,文章过滤) 后 ...
- 9.28 Django博客项目(一)
2018-9-28 17:37:18 今天把博客项目 实现了注册和添加图片的功能! 放在了自己的github上面 源码! https://github.com/TrueNewBee/bbs_demo ...
随机推荐
- H5页面跳到安卓APP和iosAPP
if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) { // window.webkit.messagehandlers是js的固定写法, ...
- UVA - 11214 Guarding the Chessboard(守卫棋盘)(迭代加深搜索)
题意:输入一个n*m棋盘(n,m<10),某些格子有标记.用最少的皇后守卫(即占据或者攻击)所有带标记的格子. 分析:因为不知道放几个皇后可以守卫所有带标记的格子,即回溯法求解时解答树的深度没有 ...
- Java算法练习——整数转罗马数字
题目链接 题目描述 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 ...
- unique constraint(PD.HSI_RIGHT) violated
插入时报错,原因:唯一约束重复了.... 查看表中有唯一约束的列是不是已经有值了 果然,唯一约束有两条重复的记录. ------------------------------------------ ...
- Python中的常用内置对象之range对象
range(start, stop[, step]) 可生成满足条件的数.具体来说是返回一个从start开始到小于stop的相邻数的差step的等差数列列表.结果中包含start一直到小于stop的 ...
- c语言寒假大作战
一.表格 问题 回答 这个作业属于那个课程 2019级计科一班 这个作业要求在哪里 寒假大作战01 这个作业的目标是 gitee注册.登录.上传文件.克隆仓库与 git基础命令学习与使用 作业正文 作 ...
- .Net实现发送邮件功能
public ActionResult AddPost() { ResponseResult result = new ResponseResult(); ...
- 实验吧web-中-简单的sql注入
页面显示:到底过滤了什么东西? 所以我们先试试到底是过滤了什么 1 显示正常 1' 不正常 (直接输入的关键字均会被过滤) 1 union select 显示:1 select 1 union sel ...
- Sqlserver 增删改查----增
注意我说的常见查询,可不是简单到一个表得增删改查,做过实际开发得人都知道,在实际开发中,真正牵扯到一个表得增删改查只能说占很小得一部分,大多都是好几个表的关联操作的. 下面我就说一下我在实际开发中经常 ...
- vSphere Replication5.5安装
vSphere Replication5.5概述 VMware vSphere Replication简称VR是 VMwarevCenter Server 的扩展,提供基于管理程序的虚拟机复制和恢复功 ...