文章目录
- 1. 安装命令:
- 2. 检查是否安装完成
- 3. 创建项目:
- 4. 创建两个应用:
- 5. 添加应用
- 6. 配置URL
- 7. template
- 7.1 模版冲突
- 解决方案:
- 7.2 模版过滤器
- 8. models(ORM)
- 9. 强大的后台,admin
- 10 `settings.py`文件配置使用说明
- 11. 分页功能
- 12.个人总结的 项目开发流程
1. 安装命令:
pip install django==2.2.1
2. 检查是否安装完成
python -m django --version
3. 创建项目:
django-admin startproject JD735
4. 创建两个应用:
cd JD735
django-admin startapp user
django-admin startapp goods
5. 添加应用
此处有两个应用, 将来可能会有更多应用, 因此在mange.py的同级目录中新建一个
apps
目录, 并将user
和goods
两个目录移入apps
目录中
- 将两个应用添加到
settings.py
中的INSTALLED_APPS
中
# /JD735/settings.py
import sys
# 新增 配置系统路径
sys.path.insert(0, os.path.join(BASE_DIR, "apps"))
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'apps.user', # 新增(注意前面添加了apps.)
'apps.goods', # 新增
]
6. 配置URL
- 在
/JD735/urls.py
中添加应用的url
这里的意思就是说:有个根URL, 其它应用的URL包含在根URL中,这样做的好处是:将来若更有更多应用, 更多URL需要管理, 使用这种方法管理起来比较方便些.
# /JD735/urls.py
from django.contrib import admin
from django.views.generic import TemplateView # 处理静态文件的view
from django.urls import path, include #这里新引入了include模块
urlpatterns = [
path('admin/', admin.site.urls),
path('', TemplateView.as_view(template_name='index.html'), name='index'), # 配置静态页面, 不需要任何view处理逻辑
path('user/', include('user.urls', namespace="user")), # 这里应用了include模块
path('goods/', include('goods.urls', namespace="goods")), # 以此类推
]
- 在应用自身的URL中添加自身的url规则,请注意django版本, 不同版本的url规则不一样,以下参考自django2.2官方文档
# apps/user/urls.py
from django.contrib import admin
from django.urls import path
from . import views
from .apps import UserConfig # 此处应用了apps.py文件
app_name = UserConfig.name # (推荐这种)这一步是必须的, 不然报错.
urlpatterns = [
path('', views.index, name='index'),
path('article/<int:user_id>', views.user_info, name='user_info'),
]
建议:
# apps/users/apps.py
from django.apps import AppConfig
class UsersConfig(AppConfig):
name = 'users'
verbose_name = '用户信息' # 建议在此加上verbose_name, 将在admin后台管理系统中更加友好的展示
goods
# apps/goods/urls.py
from django.contrib import admin
from django.urls import path
from . import views
app_name = "goods" # 或者使用更加直接的解决方法(不推荐)
urlpatterns = [
path('', views.goods_list, name='goods_list'),
path('article/<int:goods_id>', views.goods_info, name='goods_info'),
]
7. template
7.1 模版冲突
django 按照 5 里的添加顺序查找templates, 不同APP下template的同名html文件会造成冲突,导致页面错误
解决方案:
在应用的templates目录下, 创建以APP名为名称的目录, 将html文件放入新创建的目录下即可.
/goods/templates/goods/goods_list.html中用到的商品列表
{% for goods in goods_list %}
<a href="{% url 'goods:goods_list' goods_id %}"> {{ goods.goods_name }} </a>
<br>
{% endfor%}
7.2 模版过滤器
{{ value | filter1 | filter2 …}}
8. models(ORM)
一个model对应一张数据表, 在django中models以类的形式表现
它包含了一些基本字段以及数据的一些行为
# apps/user/models.py
from django.db import models
import arrow
class user(models.Model):
"""
用户表
"""
user_name = models.CharField("用户名", max_length=32)
user_address = models.TextField("收件地址", null=True)
user_pwd = models.CharField('密码', max_length=16)
create_time = models.IntegerField('创建时间', max_length=11)
# 建议为每个MODEL配置Meta信息
class Meta:
verbose_name = '用户信息' # 别名
verbose_name_plural = verbose_name # 复数形式的别名,若没有这个配置,将导致admin后台,出现`用户信息s`这样的格式
goods.Model 略
以上内容完成后, 在命令行中运行以下两条命令, 用以生成数据表
python manage.py makemigrations [user]
python manage.py migrate
9. 强大的后台,admin
python manage.py createsuperuser
输入用户名:admin
输入密码:admin123
# /JD735/settings.py
以下配置,将影响admin后台管理系统
# 默认值
# LANGUAGE_CODE = 'en-us'
# TIME_ZONE = 'UTC'
# 修改后的值, 作用是将admin后台改为中文,两种写法都可以
# LANGUAGE_CODE = 'zh-Hans'
LANGUAGE_CODE = 'zh-hans'
# 修改后的值, 作用是修改时区为中国时区
TIME_ZONE = 'Asia/Shanghai'
# 关于时区的配置,不要使用默认的时区
# USE_TZ = True 这是django 默认的,要改为False
USE_TZ = False
下一步要做的是:将生成的app注册到django后台管理系统中,
# apps/user/admin.py
# 方法1
from django.contrib import admin
from .models import Reporter, Article
class ArticleAdmin(admin.ModelAdmin):
"""
配置文件
list_display 是需要展示的字段
list_filter
"""
list_display = ("headline", "content", "pub_time", "reporter")
list_filter = ('pub_time', "reporter")
search_fields= (
'reporter',
)
class ReporterAdmin(admin.ModelAdmin):
"""
配置文件
"""
list_display = ("full_name",)
admin.site.register(Reporter, ReporterAdmin)
admin.site.register(Article, ArticleAdmin)
# 方法2(推荐):
# apps/user/admin.py
from django.contrib import admin
@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
list_display = ("headline", "content", "pub_time", "reporter")
list_filter = ('pub_time', "reporter")
search_fields= (
'reporter',
)
10 settings.py
文件配置使用说明
#settings.py
# 数据库相关配置
# default sqlite3
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
# use mysql
# 将下面的{}按相应的内容写入即可
# 注意mysql-python驱动的安装
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': {database_name},
'HOST':{host},
'USER':{user},
'PASSWORD':{password},
'PORT':{port},
}
}
11. 分页功能
分布功能可以使用 django-pure-pagination 0.3.0
, 使用方法参考Github链接
12.个人总结的 项目开发流程
- 需求分析:
- 对象是什么
- 谁用
- 谁管理
- 怎么管理
输出:需求分析分档
- 拆分需求:
- 谁的需求
- 谁可以做
输出: 拆分后需求文档
- 抽象出数据模型
输出: 数据模型(即要建哪些表, 表之间的关联, 以及表中的字段)
- 数据建模(依据数据模型来建模)
输出:数据库实例
5. 前后端分离, 依据需求文档编码实现
输出: 编码文件及文档文件
6. 前后端联调
输出: 依据需求文档前后端联调,实现功能