(十一)Django学习——结合前面所学实现一个博客小案例(附有源码)

1.创建项目及基本配置

(1)ubuntu中新建供项目使用的虚拟环境

在ubuntu中新建一个供此项目使用的虚拟环境(名为dj_test),并安装PyMsql包以供项目操作mysql数据库。

(十一)Django学习——结合前面所学实现一个博客小案例(附有源码)_第1张图片

(2)pycharm中新建Django项目

在pycharm中新建名为blog的Django项目;
配置好与远程的连接;
并新建一个名为blog_server的APP;

(十一)Django学习——结合前面所学实现一个博客小案例(附有源码)_第2张图片

(3)进行数据库配置及一些细小配置(设置项目目录下的settings.py文件)

①设置权限为all

ALLOWED_HOSTS = ["*"]

②注册APP

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    
    'blog_server',
]

③配置连接mysql数据库(注意:已经在数据库中新建了名为blog的数据库)

# Database
# https://docs.djangoproject.com/en/2.1/ref/settings/#databases

DATABASES = {
    # 'default': {
    #     'ENGINE': 'django.db.backends.sqlite3',
    #     'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    # }
    'default': {
        'ENGINE': 'django.db.backends.mysql',  # 数据库引擎
        'NAME': 'blog',                     # 数据库名称
        'USER': 'root',                        # 链接数据库的用户名
        'PASSWORD': 'qwe123',                  # 链接数据库的密码
        'HOST': '127.0.0.1',                   # mysql服务器的域名和ip地址
        'PORT': '3306',                        # mysql的一个端口号,默认是3306
    }

}

④设置时区为咱中国

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'Asia/Shanghai'			#更改

USE_I18N = True

USE_L10N = False					#更改

USE_TZ = True

(4)更改项目使用的数据库为Mysql

注意:Django默认使用的不是mysql数据库,所以需要在项目目录下的__init__.py文件中添加以下代码更改项目使用的数据库

import pymysql
pymysql.install_as_MySQLdb()

(5)将项目中的url分配好

在项目目录下的urls.py文件中分配url

from django.contrib import admin
from django.urls import path,include		#需导入include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('blog_server/',include("blog_server.urls")),		#分配url
]

2.模板文件路径配置

将提供的html页面存放到templates目录的blog目录下

(十一)Django学习——结合前面所学实现一个博客小案例(附有源码)_第3张图片

3.创建BlogModel模型映射表:

创建模型并映射(执行两个映射命令即可!)到数据库(操作blog_server下的models.py文件)

from django.db import models

# Create your models here.

class BlogModel(models.Model):
    title = models.CharField(max_length=50)
    contest = models.TextField()

(十一)Django学习——结合前面所学实现一个博客小案例(附有源码)_第4张图片(十一)Django学习——结合前面所学实现一个博客小案例(附有源码)_第5张图片

4.博客小案例对应功能实现

①模板统一继承一个父类base.html:

(十一)Django学习——结合前面所学实现一个博客小案例(附有源码)_第6张图片
②APP中的url路径配置:
(十一)Django学习——结合前面所学实现一个博客小案例(附有源码)_第7张图片

(1)index.html主页实现:

**对于主页,只需要添加url跳转的实现.
**
(十一)Django学习——结合前面所学实现一个博客小案例(附有源码)_第8张图片

(十一)Django学习——结合前面所学实现一个博客小案例(附有源码)_第9张图片

(2)add.html添加博客实现:

/templates/blog_server/add.html,我们需要加上提交的地址,csrf_token标签的作用是防御csrf攻击

(十一)Django学习——结合前面所学实现一个博客小案例(附有源码)_第10张图片
**/blog_server/views.py
render_add视图使用来渲染add.html的页面
add是处理表单提交的数据
**

(十一)Django学习——结合前面所学实现一个博客小案例(附有源码)_第11张图片

(3)list.html列表博客实现:

**通过foo.id,视图处理的时候就能够知道,具体处理的是哪个博客文章对象。
**

(十一)Django学习——结合前面所学实现一个博客小案例(附有源码)_第12张图片

(十一)Django学习——结合前面所学实现一个博客小案例(附有源码)_第13张图片

(4)detail.html详情页的实现:

**detail.html将数据展示
**

(十一)Django学习——结合前面所学实现一个博客小案例(附有源码)_第14张图片

**/blog_server/views.py
从数据库中找到对应的blog对象
通过context将blog传递到模板
**
(十一)Django学习——结合前面所学实现一个博客小案例(附有源码)_第15张图片

(5)delete删除的实现:

**从数据库中将相应的博客文章删除,然后重定向到列表页
**
(十一)Django学习——结合前面所学实现一个博客小案例(附有源码)_第16张图片

(6)修改的实现:

(由于其功能可在add.html模板中实现,所以我们只需对add.html进行一些小改动即可让其也可实现修改的功能!)

(十一)Django学习——结合前面所学实现一个博客小案例(附有源码)_第17张图片

(十一)Django学习——结合前面所学实现一个博客小案例(附有源码)_第18张图片


实现效果:

①首页:

(十一)Django学习——结合前面所学实现一个博客小案例(附有源码)_第19张图片

②添加博客

(十一)Django学习——结合前面所学实现一个博客小案例(附有源码)_第20张图片

③列表页:

(十一)Django学习——结合前面所学实现一个博客小案例(附有源码)_第21张图片

④数据库查看数据:

(十一)Django学习——结合前面所学实现一个博客小案例(附有源码)_第22张图片

⑤拓展:分页!!!

第一部分:分页属性及方法的学习:
使用自定义的列表li模拟数据库中的QuerySet数据:

(十一)Django学习——结合前面所学实现一个博客小案例(附有源码)_第23张图片

(十一)Django学习——结合前面所学实现一个博客小案例(附有源码)_第24张图片

(十一)Django学习——结合前面所学实现一个博客小案例(附有源码)_第25张图片

(十一)Django学习——结合前面所学实现一个博客小案例(附有源码)_第26张图片
在这里插入图片描述

(十一)Django学习——结合前面所学实现一个博客小案例(附有源码)_第27张图片

在这里插入图片描述

现在有个问题就是,第n页的整个的实例对象的方法与Paginator这个分页实例对象的方法不互通,那么,如果我们在获取了第n页的实例对象后要使用到Paginator这个分页的实例对象的方法该怎么做呢?

(十一)Django学习——结合前面所学实现一个博客小案例(附有源码)_第28张图片

(十一)Django学习——结合前面所学实现一个博客小案例(附有源码)_第29张图片

第二部分:结合本项目进行实现:

①视图函数的更改(博客列表页实现分页)
(十一)Django学习——结合前面所学实现一个博客小案例(附有源码)_第30张图片

②列表模板路径更改(向其传参num:实现分页第几页的变换)
(十一)Django学习——结合前面所学实现一个博客小案例(附有源码)_第31张图片
③list.html模板文件的更改(实现分页展示;可进行上下分页变换)

{% extends "blog_server/base.html" %}

{% block title %}
列表页
{% endblock %}

{% block con %}
    <ul>
    <li><h2>文章标题</h2></li>
        {% for foo in pages %}
            <li>
                <a href={% url 'detail' foo.id %}>{{ foo.title }}</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                <a href={% url 'edit_blog' foo.id %}>修改</a>
                <a href={% url 'delete_blog' foo.id %}>删除</a>
            </li>
        {% endfor %}
    </ul>
    {#    .number方法是获取当前页的页码;#}
    {#    .previous_page_number方法是获取上一页的页码;#}
    {#    .next_page_number方法是获取下一页的页码;#}
    {#    .has_previous方法是判断是否有上一页;#}
    {#    .has_next方法是判断是否有下一页。#}
    {% if pages.has_previous %}
            <a href="{% url 'list' pages.previous_page_number %}">上一页</a>
    {% else %}
            <a href="javascript:">上一页</a>
    {% endif %}

    {% if pages.has_next %}
            <a href="{% url 'list' pages.next_page_number %}">下一页</a>
    {% else %}
            <a href="javascript:">下一页</a>
    {% endif %}

{% endblock %}

整个项目源码百度网盘链接:

链接:https://pan.baidu.com/s/1ZlZeM8FPylusbX5FpFeIaA
提取码:o5qe

你可能感兴趣的:(Django)