一、认识Django
1.基本原理
Django是一个开放源代码的Web应用框架,由Python写成。采用了MTV的框架模式,即模型M,视图V和模版T。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是CMS(内容管理系统)软件。
2.框架
- 用于创建模型的对象关系映射;
- 为最终用户设计较好的管理界面;
- URL 设计;
- 设计者友好的模板语言;
- 缓存系统。

二、基本应用结构

(1)配置文件setting
- BASE_DIR:即为项目所在目录,__file__可以获得当前文件的路径,BASE_DIR的存在使我们项目的可移植性更强。
- SECRET_KEY:一个特殊的Django安装的密钥,每当使用Django-admin startproject时会自动生成一个。
- DUBUG:默认值为FALSE,当选择TRUE时,当我们的项目出错时可以使我们看到出错信息,但是为了防止被用户看到或者他人攻击,在项目上线后应改为FALSE。
- ALLOWED_HOSTS:默认值是一个空列表,列表中的值为哪些域名可以访问我们的Django项目
- INSTALLED_APPS:安装的APP列表,Django为我们默认添加了一些自带的项目,图片中Users是我自己创建的项目。我们自己创建的APP都要加入这个列表才可以被使用。
- MIDDLEWARE:这是我们要使用的中间件的列表。
- ROOT_URLCONF:表示根URLconf的完整Python导入路径的字符串。
- TEMPLATES:这是对我们的template的选项,template用于存放我们的html文件。详细的选项可以参照DjangoTemplates官方文档。
- LANGUAGE_CODE:Django项目的语言代码,默认值为en-us也就是英语,这里我选择的是zh-hans也就是我们的汉语。选择之后Django的admin界面就将变为汉语。
- TIME_ZONE:时区,默认值是UTC。当USE_TZ为TRUE时,无论TZ设置为何值Django都会使用系统默认的时区,例如要使用上海的时区则需将USE_TZ=FALSE,TIME_ZONE=‘Asia/Shanghai’。
- USE_I18N:国际化,Django允许开发者指定要翻译的字符串,也可以让访问者进行语言选择。
- USE_L10N:是否选择启用数据的本地化。
- USE_TZ:TimeZone,如果开启了Time Zone功能,则所有的存储和内部处理,甚至包括直接print显示全都是UTC的。只有通过模板进行表单输入/渲染输出的时候,才会执行UTC本地时间的转换。
- 通过settings.py默认的选项进行设置就可以启动一个Django项目了,接下来是一些常用的选项。
- STATIC_URL:静态目录的所有文件,存放css,js等文件。
- STATICFILES_DIRS:将我们自己的static文件加入static路径。
- MEDIA_URL:与STATIC_URL类似,存放用户上传的文件。
- 加入安装的APP列表

(2)URL(路由系统)
- URL配置(URLconf)就像 Django 所支撑网站的目录。它的本质是URL模式以及要为该URL模式调用的视图函数之间的映射表;就是以这种方式告诉Django,对于这个URL调用这段代码,对于那个URL调用那段代码。
- 在Django开发中,为使开发更加规范,通常在每个App中设置独立的静态资源和模板文件夹,并添加一个空白的urls.py文件,将属于App的URL都写入到该文件中,而项目根目录的urls.py是将每个App的urls.py统一管理。当程序收到用户请求时,首先在根目录的urls.py查找该URL是属于哪个App,然后在从App的urls.py找到具体的URL信息。
(3)视图文件views
- 一个视图函数,简称视图,是一个简单的 Python 函数,它接受 Web 请求并且返回 Web 响应。
- 响应可以是一个 HTML 页面、一个 404 错误页面、重定向页面、XML 文档、或者一张图片…
- 无论视图本身包含什么逻辑,都要返回响应。代码写在哪里都可以,只要在 Python 目录下面,一般放在项目的 views.py 文件中。
- 每个视图函数都负责返回一个 HttpResponse 对象,对象中包含生成的响应。
- 视图层中有两个重要的对象:请求对象(request)与响应对象(HttpResponse)。
三、建立一个简单的项目
- 快捷键:win + R
- 输入命令:cmd
- 注意:如果所建项目没在桌面,可以进入绝对路径输入命令cmd,直接进入绝对路径环境

(2)建立项目
- 建立项目的命令django-admin startproject helloWorld
- 进入激活环境:activate dj
- 转换路径,用cd 进入helloWorld

- 开启后台服务器:python manage.py runserver

- 访问服务器,运行结果:

2.数据库的配置
(1)从helloword项目中访问页面
- 打开浏览器,访问http://127.0.0.1:8000/,你将看到Django的火箭欢迎界面

(2)虚拟环境下安装pymysq
- 首先,在Python虚拟环境下安装pymysql:pip install pymysql。
- 修改配置文件settings.py

- NAME:为你自己mysql数据库中的库名,如果没有自己创建,名字自己起。
- USER:为你自己电脑mysql的用户名
- PASSWORD: 为你自己的mysql密码
其他不用改
3.数据的迁移
- 命令行输入:python manage.py makemigrations

- Myapp目录下面多令一个migrations目录:

- 输入 python manage.py migrate

- 查看数据库:

4.创建超级用户
(1)注册超级用户
- 输入命令:python manage.py createsuperuser
- 跟这命令输入用户名,邮箱,密码
- 这里的密码至少要8个字符
- 当出现了superuser created successful时创建成功。
- 超级用户可以定义多个。

(2)开启服务器,登录后台

- 登录以后会出现以下界面:

(3)将服务器语言换成中文
- 在配置文件中进行更改:

- 保存后再次刷新页面:

5.实现界面跳转

(1)创建一个app
- 命令行输入:python manage.py startapp myapp article

- 打开pycharm会发现多了很多文件:

(2)建立模型
- 定义标题和内容
- max_length指定标题的长度不能超过30
- TextField 是用于大尺寸文本的大型文本字段。 TextField 通常用于存储段落和所有其他文本数据。此字段的默认表单小部件是 文本区域。
- TextField 采用变长存储,存储内容为:实际大小 + 长度记录位。

(3)安装的APP列表

6.在后台服务器创建问题内容


- 创建三个问题

四、模板显示内容
1.通过一个处理方法获取文章唯一标识
(1)修改article文件下的view文件

(2)编辑总路由url
- int是定义一个整数类型的变量
- 第三个变量是别名

- 开启后台服务器:http://127.0.0.1:8000/admin/article/1
- 查看效果:

2.模型object是获取模型的对象

3.建立一个templates文件夹


4.在文件夹下面建立一个article_detail
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<body>
<h2>{{ article_obj.title }}h2>
<p>{{ article_obj.content }}p>
body>
html>
3.修改视图文件
(1)get_object_or_404:
- 我们原来调用django 的get方法,如果查询的对象不存在的话,会抛出一个DoesNotExist的异常
(2)context:
(2)render_to_response与render
- 使用的render_to_response是简化的写法,这里考虑到有些版本的问题用不起,我们可以用render来代替
- 相同点:都是展示模板页面的。
- 不同点:render 方法可接收三个参数,一是request参数,二是待渲染的html模板文件,三是保存具体数据的字典参数。它的作用就是将数据填充进模板文件,最后把结果返回给浏览器。render 自动使用RequestContext,而 render_to_response 需要 coding 进去。

4.获取文章列表

(1)在视图文件中加入list

(2)建立article_list.html
- 用(a href 来连接到目录,实现点击目录的跳转)
- pk是主键
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<body>
{% for article in articles %}
<a href="{% url 'article_detail' article.pk %}">{{ articles.title }}a>
{% endfor %}
body>
html>
- 备注:如果出现endfor的错误,这里就需要注意空格的问题。

(3)编辑路由url

(4)最终实现效果:

5.建立分路由

- 当建立的文件变多了的时候,分路由就变得很重要了。
- 如果把链接都写到同一个文件中会变得繁杂,这时候就需要建立分路由。
- 在article的APP中建立urls
(1)修改总路由

(2)分路由编辑
from django.urls import path
from . import views
urlpatterns = [
path('', views.article_list, name="article_list"),
path('', views.article_detail, name="article_detail"),
]
五、定制后台和修改模型
设置模型__str__
定制admin
1.创建类
-
list_display和get_list_display(self,request)返回是一个tuple或list,如果子类需要进行修改请使用list。每个元素都是一个字符串。

-
在网页中显示出标题和内容

-
在list_disolay中增加一个id属性
-
刷新页面查看结果:

-
这里的id是按照倒叙排序的
-
这里可以通过ordering命令来实现排序功能:
ordering = (“id”,)
-
如果是倒叙的话在id里面加一个负号:ordering = (“-id”,)
2.修饰类
- 基本格式:@admin.register(Article)
- register()中对应的内容是模型注册对应的类
from django.contrib import admin
from .models import Article
admin.site.register(Article)
@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
list_display = ("id", "title", "content", "created_time")
ordering = ("id",)
3.修改模型要更新数据库


(2)TextField
TextField 是文本输入组件,即输入框,常用组件之一。
(3)在模板中创建DateTimeFiled
- DateTimeFiled创建日期时间

(4)进行数据库迁移
- 在虚拟环境中输入命令:
python manage.py makemigrations - 这时会出现select an option的提示,这个指我们创建的字段没有设置默认值,需要进行创建,这里有两种方法。

1)方法一
- 直接输入默认值1

- 需要设置当前时间区域,直接输入timezeon.now
- 输入命令:python.manage.py migration

- 运行服务器查看效果:

2)方法二
- 在model中设置日期时间的默认值:
default = timezeon.now - 输入迁移命令直接迁移:
python manage.py makemigrations - 这里需要把用第一种方法的数据库先进行删除之后在迁移。

- 设置日期行为参数:

- 当它形成的时候自动添加当前的时间
- 创建数据库迁移文件:
python manage.py makemigrations

- 输入默认值和timezeon.now
- 迁移成功:python.manage.py migration

- 运行后台显示效果:

4.更新日期