热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Django学习笔记一:搭建简易博客

最近在学习Django框架,记录一下学习笔记。文章最后附上学习资料链接,供大家学习。我的项目源码已经上传到github:https:github.comxuna123Dja

最近在学习Django框架,记录一下学习笔记。
文章最后附上学习资料链接,供大家学习。
我的项目源码已经上传到github:https://github.com/xuna123/Django_study1/tree/master

1.前言:

Django是一个开放源代码的Web应用框架,由Python写成。采用了MVC的软件设计模式,即模型M,视图V和控制器C。
Django框架的核心:
一个面向对象的映射器,用作数据模型(以Python类的形式定义)和关系性数据库间的媒介。
一个基于正则表达式的URL分发器。
一个视图系统,用于处理请求。
一个模板系统。

2.开发环境:

  • 操作系统:虚拟机ubuntu 16.04 64bit
  • Django :1.11.3
  • Python : 3.5.2
  • IDE: atom 1.18.0
  • 数据库:Django自带的SQLite3(类似与access,SQLite3 是一个十分轻巧的数据库,它仅有一个文件)

3.简单博客实现的功能 :

 从数据库获得文章数据,显示在前台。
文章的属性:标题,正文,作者,发表时间四项。

4.创建Django项目与应用

(1)

#创建项目 相当于项目的容器
django-admin.py startproject esay_blog
#创建应用app
django-admin.py startapp blog

此时项目文件夹的树形结构为:
这里写图片描述
- easy_blog。
- manage.py: Django项目里面的工具,可以调用数 据库。
- settings.py: 该 Django 项目的设置/配置。
- urls.py: 该 Django 项目的 URL 声明,一份由 Django 驱动的网站”目录”。
- wsgi.py: 一个 WSGI 兼容的 Web 服务器的入口,以便运行你的项目。
- blog:建立的django应用

(2)本地运行服务器,查看项目运行:

python3 manage.py runserver

打开浏览器,输入地址如下出现如下则创建成功:
这里写图片描述
(3)注册博客应用

easy_blog/easy_blog/settings.py
# Application definition

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog', #注册的博客应用
]

5.设计数据库模型(M)

简易的博客主要包含文章,文章含有标题,正文,作者,发表时间。这些数据存在数据库就是一个类似下面的表格形式,而且会给每篇博客自动创建一个id。
id 标题 正文 发表时间
1 title 1 text 1 2017-7-19
2 title 2 text 2 2017-7-20
(1)编写文章部分代码:

easy_blog/blog/models.py
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models
from django.contrib.auth.models import User

# Create your models here.
class Article(models.Model):
'''
文章数据库
'''

#文章标题字段 CharField相当于sql里面的char
title = models.CharField(max_length=70)

#文章正文字段
body = models.TextField()

#文章的创建时间
created_time =models.DateTimeField()

(2)将Python语言翻译成数据库语言,在数据库中创建我们想要的表格。

#Django 在 blog 应用的 migrations\ 目录下生成了一个 0001_initial.py 文件,这个文件是 Django 用来记录我们对模型做了哪些修改的文件。
python3 manage.py makemigrations
#翻译成数据库语言

运行显示如图则成功:
这里写图片描述

6.设计Django模板(C)

我们在根目录下建立 templates文件 ,在templates下面建立一个index.html
主要是把数据库中的内容呈现在前台。

easy_blog/templates/index.html
{% load staticfiles %}

<html>
<head>
<title>xunalove的博客title>



<meta charset="UTF-8">
<meta name="viewport" content=">


<link rel="stylesheet" href="http://code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css">
<link rel="stylesheet" href="{% static 'blog/css/bootstrap.min.css' %}">
<link rel="stylesheet" href="
{% static 'blog/css/pace.css' %}">
<link rel="stylesheet" href="
{% static 'blog/css/custom.css' %}">


<script src="
{% static 'blog/js/jquery-2.1.3.min.js' %}">script>
<script src="{% static 'blog/js/bootstrap.min.js' %}">script>
<script src="{% static 'blog/js/pace.min.js' %}">script>
<script src="{% static 'blog/js/modernizr.custom.js' %}">script>
head>

<body>
<div class="container">
<header id="site-header">
<div class="row">
<div class="col-md-4 col-sm-5 col-xs-8">
<div class="logo">
<h1><a href="index.html">xunalove的博客a>h1>
div>
div>
<div class="col-md-8 col-sm-7 col-xs-4">
<nav class="main-nav" role="navigation">
<div class="navbar-header">
<button type="button" id="trigger-overlay" class="navbar-toggle">
<span class="ion-navicon">span>
button>
div>
nav>
div>
div>
header>
div>

<div class="content-body">
<div class="container">
<div class="row">
<main class="col-md-8">
{% for post in article_list %}
<article class="post post-
{{ post.pk }}">
<header class="entry-header">
<h1 class="entry-title">
<a href="single.html">
{{ post.title }}a>
h1>
<div class="entry-meta">

<span class="post-date"><a href="#"><time class="entry-date"
datetime="
{{ post.created_time }}">{{ post.created_time }}time>a>span>

div>
header>
<div class="entry-content clearfix">
<p>{{ post.excerpt }}p>
<div class="read-more cl-effect-14">
<a href="#" class="more-link">继续阅读 <span class="meta-nav">span>a>
div>
div>
article>
{% empty %}
<div class="no-post">暂时还没有发布的文章!div>

{% endfor %}

main>

<aside class="col-md-4">
aside>
div>
div>
div>

<script src="{% static 'blog/js/script.js' %}">script>
body>
html>

7.设计视图函数(V)

使用Django里面的all() 方法从数据库里获取了全部的文章,存在了article_list 变量,博客文章列表是按文章发表时间倒序排列的

blog/views.py
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.shortcuts import render
from .models import Article

# Create your views here.
def index(request):
article_list = Article.objects.all().order_by('-created_time')

#文章列表数据的 article_list 变量传给了模板
return render(request, 'index.html', cOntext={'article_list':article_list})

(1)绑定URL和视图函数

blog/urls.py
from django.conf.urls import url
from . import views
urlpatterns = [
'''
绑定URL与视图函数
把网址和对应的处理函数作为参数传给url函数
第一个参数:网址
第二个参数:处理函数
第三个参数:别名,显示在浏览器
'''

url(r'^$',views.index, name=index),
]

(2)告诉项目的url

easy_blog/urls.py
from django.conf.urls import url,include
from django.contrib import admin

urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'', include('blog.urls')),
]

8.Django Admin后台管理

Admin是Django自带的后台管理,我们可以在后台注册我们的模型,方便写文章和管理。
(1)创建管理员帐号:

 python3 manage.py createsuperuser

根据要求输入帐号,邮箱,密码。
(2)注册我们的模型:

blog/admin.py
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.contrib import admin
from .models import Article

# Register your models here.
admin.site.register(Article)

(3)启动服务器:

python3  manage.py runserver

运行开发服务器,访问 http://127.0.0.1:8000/admin/ :
输入注册的帐号和密码,登进去可以看到我们刚才注册的Article模型:
这里写图片描述
现在我们在后台编辑一篇文章:

这里写图片描述
(2)运行开发服务器,访问 http://127.0.0.1:8000/ ,此时就可以看到我们刚刚添加的文章。
这里写图片描述
现在的博客界面比较简陋。。

9.遇到的问题:

(1) 怎么样修改后台界面为中文?时区为中国?
解决方法:修改setting.py的LANGUAGE_CODE项就可以实现(修改如下):

把英文改为中文
LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'zh-hans'

把国际时区改为中国时区
TIME_ZOnE= 'UTC'
TIME_ZOnE= 'Asia/Shanghai'

USE_I18N = True

USE_L10N = True

USE_TZ = True

此时界面如下:

这里写图片描述

(2)添加文章时候发现添加内容为中文时出现下列错误:
这里写图片描述
解决方法*:在models.py增加下面代码:

import sys
reload(sys)
sys.setdefaultencoding('utf8')

打开浏览器,输入本地ip:
学习资料:
维基百科
菜鸟教程:http://www.runoob.com/django/django-tutorial.html
django博客教程:http://zmrenwu.com/category/django-blog-tutorial/
django book:http://djangobook.py3k.cn/2.0/?utm_source=qq&utm_medium=social


推荐阅读
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 20211101CleverTap参与度和分析工具功能平台学习/实践
    1.应用场景主要用于学习CleverTap的使用,该平台主要用于客户保留与参与平台.为客户提供价值.这里接触到的原因,是目前公司用到该平台的服务~2.学习操作 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 本文介绍了Linux Shell中括号和整数扩展的使用方法,包括命令组、命令替换、初始化数组以及算术表达式和逻辑判断的相关内容。括号中的命令将会在新开的子shell中顺序执行,括号中的变量不能被脚本余下的部分使用。命令替换可以用于将命令的标准输出作为另一个命令的输入。括号中的运算符和表达式符合C语言运算规则,可以用在整数扩展中进行算术计算和逻辑判断。 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • Python爬虫中使用正则表达式的方法和注意事项
    本文介绍了在Python爬虫中使用正则表达式的方法和注意事项。首先解释了爬虫的四个主要步骤,并强调了正则表达式在数据处理中的重要性。然后详细介绍了正则表达式的概念和用法,包括检索、替换和过滤文本的功能。同时提到了re模块是Python内置的用于处理正则表达式的模块,并给出了使用正则表达式时需要注意的特殊字符转义和原始字符串的用法。通过本文的学习,读者可以掌握在Python爬虫中使用正则表达式的技巧和方法。 ... [详细]
  • 分享css中提升优先级属性!important的用法总结
    web前端|css教程css!importantweb前端-css教程本文分享css中提升优先级属性!important的用法总结微信门店展示源码,vscode如何管理站点,ubu ... [详细]
  • 2016 linux发行版排行_灵越7590 安装 linux (manjarognome)
    RT之前做了一次灵越7590黑苹果炒作业的文章,希望能够分享给更多不想折腾的人。kawauso:教你如何给灵越7590黑苹果抄作业​zhuanlan.z ... [详细]
author-avatar
UFO来了-
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有