# Django3_laochen
**Repository Path**: runler/django3_laochen
## Basic Information
- **Project Name**: Django3_laochen
- **Description**: Django3.0项目实战
头条 老陈说编程2020-12-31 https://www.toutiao.com/i6910832282043466254/
- **Primary Language**: Python
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 2
- **Forks**: 0
- **Created**: 2021-01-06
- **Last Updated**: 2024-02-04
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
### Django3.0项目实战
头条 老陈说编程2020-12-31 https://www.toutiao.com/i6910832282043466254/
#### 1.3 创建项目
社区版没有直接创建Django项目的功能,为此我们用命令实现。
打开终端,cd到你想存放项目的目录下,输入```django-admin startproject sales``` 命令即可创建项目sales。
用PyCharm专业版
勾选Make available to all projects,表示可将此虚拟环境提供给其他项目使用
settings.py
- 增加 import os
- 构建应用 打开PyCharm下面的Terminal,输入```python manage.py startapp base```命令即可创建应用base
- 项目运行 python3 manage.py runserver
- 鼠标右键sales(外层那个)-【New】-【Directory】,新建templates目录
#### 2.1 项目文件
两个sales文件,外层的sales,是存放项目内容的文件夹,这个名称可以随意更改,只要你喜欢就行。内层sales包含的settings.py、urls.py等文件,加上manage.py,便是Django的系统框架了。
__init__.py:内容一般是空的,常用来声明(它)所在之处的文件夹(sales)是个包;
settings.py:包括了项目的初始化设置,对整个项目进行相关配置,比如数据库连接参数、添加应用等;
asgi.py:构建异步Web界面和处理双向协议的新方式,是Django3.0版本新出的异步功能;
urls.py:url地址秀,网站目录,配置简单容易理解,可把用户在浏览器中发出的请求,映射到指定的应用程序上;
wsgi.py:告诉中间件(Apache或nginx):帮我运行Django开发的项目吧,我滴乖乖。开发过程中很少用到;
templates:存放HTML模板文件;
manage.py:Django的任务管理命令行工具。可用来生成数据库迁移文件,同步表结构,生成App等,是项目中的管家。
#### 2.2 应用文件
在项目(sales)中的应用base,实际上是我们接下来要开发实现的销售管理系统中的基础数据功能模块来的。在base下的文件,无论你想不想都要搞清楚。
migration:存放数据表结构的指令文件,通过它们可以修改和创建数据库,从而在models.py模型类和数据库表之间进行迁移;
__init__.py:内容有时不是空的,它来声明base文件夹是个包;
admin.py:应用的连接,配置model,连接Form,声明在Django自带的后台管理系统;
apps.py:通常里面包含对应用的配置,如应用名称;
models.py:实体类定义,会生成对应的数据库表结构。同时还具备操作数据库的能力(API),省去手动编写增删改查的重复工作;
tests.py:单元测试工具,可以编写测试文档来测试所建立的应用;
views.py:虽然从名字上看是视图的意思,实际上是逻辑控制用的,同web页面交互,与models交流,协调整个系统有条不紊的动作。
#### 3.2 配置项目
打开settings.py配置文件,在底部找到LANGUAGE_CODE和TIME_ZONE,将其改成支持简体中文模式,默认是英文的,至于繁体字等代号,请自行查询。
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
有关数据库的配置也在这时进行,默认为sqlite的配置信息,这也是咱们开始时使用的数据库。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
如果是Mysql数据库,配置信息会多几个参数,其他关系数据库,除了ENGINE不同外,其他的参数是差不多的。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': '', # 数据库名称
'USER': '', # 连接账户
'PASSWORD': '', # 连接密码
'HOST': '', # IP地址
'PORT': '', # 端口号
}
}
Django3.0支持PostgreSQL 9.5和更高版本,低版本的不支持。Django3.0支持Oracle 12.2和18c,低版本的不支持。
##### 1. 配置模板
找到TEMPLATES节点,找到里面的'DIRS':项,配置信息如下。这里的django.template.backends.django.DjangoTemplates应用,专门用来管理模板,它会收集整个项目templates下的文件。
如果一个项目中,有多个templates存在,而且模板文件(html)有重名的情况,那找到的不一定就是你想要的。为了区分,就需要多加一层(base)目录,名字一般是应用名称。
'DIRS': [os.path.join(BASE_DIR, 'templates')],
##### 2. 配置静态文件
在templates文件夹的同级目录下新建static文件夹
Django中的静态文件,是指图片、CSS、Javascript等文件,模板定位到settings.py底部,确定有STATIC_URL这个节点,如果没有,自行补上。。这个是静态文件的目录名称。
django.contrib.staticfiles应用对整个项目的静态文件进行收集统一管理,其原理跟模板是一样的,也需要在static文件夹下,加多一层(base)目录,名字一般是应用名称。
STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]
#### 4.1 model设计
打开base应用下的models.py文件,创建第一个model--岗位(Post)。一个表结构的定义,最少需要三项内容,分别是表名称、字段名称和数据类型。
在实体类中,表名称由db_table指定,默认为类名(Post);字段名称由db_column指定,默认为属性(name),数据类型由CharField、DateTimeField等指定。
#### 4.6 数据迁移
在设计好models之后,你需要将其生成数据表结构,从models生成数据表的这个过程,叫着数据迁移。在命令行窗口,运行python3 manage.py makemigrations为模型的改变生成迁移文件;运行python3 manage.py migrate对应用数据库进行迁移。
如果你只想迁移其中的一个,可以用命令的最后加上App的名称,如python3 manage.py makemigrations base和python3 manage.py migrate base。
温馨提示:迁移的models,是在settings.py的INSTALLED_APPS节点获取的,没在这里登记的,是不会进行迁移的。
#### 5 在views中操作数据
##### 5.1 新增数据
打开base下的views.py文件,引入models,编写新增数据的方法。编写好之后,进入5.2的urls.py文件里进行配置,配置网址和views中的函数的绑定,以便提供给浏览器访问。
##### 5.2 urls配置
为了将访问节点,提供给用户,你需要将其告知用户,而节点的配置是在urls.py进行的。为了按模块,在创建base应用时,新建过一个urls.py文件(如果没有,现在就补上)。打开它并输入代码。
- 独立模块(base下)的新建 urls.py
```python
from django.urls import path
from . import views
app_name = 'base'
urlpatterns = [
path('create/', views.create, name='create'),
]
```
- 项目sales下urls.py中进行注册
```python
from django.contrib import admin
from django.urls import path
from django.urls import include
urlpatterns = [
path('base/', include('base.urls')),
path('admin/', admin.site.urls),
]
```
#####5.4 查询数据
在views.py文件中,新增index查询方法,同时返回删除和修改的链接。从HttpResponse的名字,你应该可以猜出,返回结果是html页面来的。记住,新增一个方法,就要到base下的urls.py文件中进行访问节点配置。
##### 5.5 删除修改
新增删除和修改方法并用HttpResponseRedirect进行页面重新导向。html的超链接标签是,用它可进行页面跳转。代码中的format()函数实现了占位符功能,而重定向用HttpResponseRedirect实现。
#### 6.1 模板文件
在开发工具中,鼠标右键base下的templates选择【New】-【HTML 5 file】输入index。调整html页面内容。HTML的数据是静态的,动态内容由框架标签负责引进。Django在html页面嵌入标签,使用{% 代码块 %}的形式存在的,而输出内容则使用{{ 变量名称 }}。
#### 6.2 标签释义
模板标签的本质是函数,标签名一般即为函数名,分工的意义就不用多说了,主要作用是载入代码渲染模板或对传递过来的参数进行一定的逻辑判断或计算后返回。
在Web框架中,标签常分为内置标签和自定义标签,在内置标签不够用的时候,才会去自定义标签(说了句废话)。
1. 内置标签
Django的内置标签不是很多,常用标签一览表。
2. 自定义标签
如果Django框架内置的标签不够用,你完全可以进行自定义。标签自定义只用2个步骤便可进行进行创建,而在页面中应用,同内置标签并没有什么不同。
(1) 新建templatetags包
鼠标右键base应用,【New】-【Python Package】新建templatetags包,它跟templates和static同级。
(2) 新建标签文件
在templatetags下,新建一个mytag.py文件,我用返回当前日期打个样子,你可自行发挥,任意胡编乱造。
from datetime import datetime
from django import template
register = template.Library()
@register.simple_tag
def current_time():
return datetime.now()
(3) 在模板中的应用
在模板中,通过{% load mytags %}进行引入。温馨提醒:只有应用(base)在settting.py中INSTALLED_APPS进行登记的,自定义标签才能起作用。
{% load mytag %}
当前日期:{% current_time %}
标签注册装饰器,除了简单声明外,还可以带参数,通过添加name参数,可以为标签举个另外的名字(默认是函数名),@register.simple_tag(name='current')。
还可以通过设置takes_context=True,获取上下文中的内容,如获取从views.py传过来的数据context['posts']。
另外,可通过@register.inclusion_tag('index.html')获取其他模板文件内容。这种标签,称为包含包含标签。
#### 6.3 过滤器
过滤器跟标签一个样,也是在模板中对函数进行调用,它可对输出变量的内容的进一步处理(过滤),如前面对创建岗位日期进行格式化处理,如对含有大小写的英语单词,全部转换为大写等。
在内置过滤器满足不了需求的情况下,也可进行自定义。自定义步骤跟标签是一致的,也新建templatetags包和文件,然后在模板中进行引入,引入方法也是一样的。不同的是在py文件中,用的装饰器是@register.filter,在模板中的用法是{{变量名称|过滤器}}。
Django的内置过滤器不是很多,常用过滤器一览表。
{{ post.createDate | date:'Y-n-d' }}
#### 6.4 共享模板
在开发一套系统时,为了统一性,布局会进行整体规划。一般会把页面分为上中下结构,上是指顶部,内容大多是logo和导航标签,中部是详细内容,底部是版权说明和友情链接。
在base/templates/base下,新建3个模板文件,分别是:header.html、footer.html和base.html,内容按下面进行调整。
header.html文件内容