在ubuntu中新建一个供此项目使用的虚拟环境(名为dj_test),并安装PyMsql包以供项目操作mysql数据库。
在pycharm中新建名为blog的Django项目;
配置好与远程的连接;
并新建一个名为blog_server的APP;
①设置权限为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
注意:Django默认使用的不是mysql数据库,所以需要在项目目录下的__init__.py文件中添加以下代码更改项目使用的数据库
import pymysql
pymysql.install_as_MySQLdb()
在项目目录下的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
]
将提供的html页面存放到templates目录的blog目录下
创建模型并映射(执行两个映射命令即可!)到数据库(操作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()
①模板统一继承一个父类base.html:
/templates/blog_server/add.html,我们需要加上提交的地址,csrf_token标签的作用是防御csrf攻击
**/blog_server/views.py
render_add视图使用来渲染add.html的页面
add是处理表单提交的数据
**
**通过foo.id,视图处理的时候就能够知道,具体处理的是哪个博客文章对象。
**
**detail.html将数据展示
**
**/blog_server/views.py
从数据库中找到对应的blog对象
通过context将blog传递到模板
**
**从数据库中将相应的博客文章删除,然后重定向到列表页
**
(由于其功能可在add.html模板中实现,所以我们只需对add.html进行一些小改动即可让其也可实现修改的功能!)
第一部分:分页属性及方法的学习:
使用自定义的列表li模拟数据库中的QuerySet数据:
现在有个问题就是,第n页的整个的实例对象的方法与Paginator这个分页实例对象的方法不互通,那么,如果我们在获取了第n页的实例对象后要使用到Paginator这个分页的实例对象的方法该怎么做呢?
第二部分:结合本项目进行实现:
②列表模板路径更改(向其传参num:实现分页第几页的变换)
③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>
<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