DjangoWeb应用开发实战所有章节汇总

第一章 Django建站基础:

讲解基本的web知识点,网站的定义和组成,各种网站的分类,网站运行原理及开发流程.等

域名知识讲解:

如百度的,前面的www是网络名,在前面的https是通信协议,baidu.com才是域名,com代表是一个国际域名。
常见的域名后缀

.com:商业性的机构或公司
.NET:从事Internet相关的网络服务的机构或公司
.ORG:非盈利的组织、团体
.GOV 政府部们
.cn 中国国内域名
.com.cn 中国商业域名
.net.cn 中国从事Internet相关的网络服务的机构或公司
.org.cn 中国非盈利的组织、团体
.gov.cn  中国政府部们

一:咨询门户类网站

##实现的功能:
承载的信息类型,例如是否承载多媒体信息、是否承载结构化信息
信息发布的方式和流程
信息量的数量级
网站用户管理

二:企业品牌网站

企业形象
品牌形象
产品形象

三:交易类网站

B2C:商家————消费者;如:购物网站,超市
B2B:商家————商家;如:批发市场
C2C:消费者————消费者:如跳蚤市场

四:办公及政府机构网站

主要有办公事务管理系统、人力资源管理系统和办公成本管理系统
##实现的功能:
提供多数据源接口,实现业务系统的数据整合
同一用户管理,提供方便有效的访问权限和管理权限体系
灵活设立子网站,实现复杂的信息发布管理流程

五:互动游戏类网站

4399小游戏

六:功能性网站

百度搜索

我想补充的是django在开发网站的流程是什么,他该如何开发网站。

第二章 Django配置信息:

基本配置信息

settings.py

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # BASE_DIR的目录是创建开始的文件夹
# 也就是 django-admin startproject Appname
SECRET_KEY = '#+m+r2vq)0fy2r((-=g4(m3betkfhj7ax5hbwf34v^+fb(kb8g'
# 密钥主要用于用户密码、CSRF机制和会话Session等数据加密
INSTALLED_APPS = [
    'django.contrib.admin', # 内置的后台管理系统
    'django.contrib.auth', # 内置的用户认证系统
    'django.contrib.contenttypes', # 记录项目中所有model元数据(Django的ORM框架)
    'django.contrib.sessions', # Session会话功能,用于标识当前访问网站的用户身份,记录相关用户信息
    'django.contrib.messages', # 消息提示功能
    'django.contrib.staticfiles', # 查找静态资源路径
    # 添加项目应用index
    'index'
]
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates', # 定义模板引擎;一般有两种,django.DjangoTemplates和jinja2.Jinja2
        'DIRS': [os.path.join(BASE_DIR, 'templates'), # 设置模板所在路径
                 os.path.join(BASE_DIR, 'index/templates')],
        'APP_DIRS': True, # 是否在App里查找模板文件
        'OPTIONS': { # 用于填充在RequestContext的上下文(模板里面的变量和指令),一般情况下不做任何修改
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]
# 中间件的作用是处理用户请求和返回响应信息
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware', # 内置的安全机制
    'django.contrib.sessions.middleware.SessionMiddleware', # 会话Session
    # ImportError: Module "django.middleware.locale" does not define a "LoacleMiddleware" attribute/class
    # 报错如上,添加了LoacleMiddleware中间件 # 中间件名字写错了
    # 'django.middleware.locale.LoacleMiddleware', # 国际化和本地化功能
    'django.middleware.common.CommonMiddleware',# 处理请求信息,规范化请求内容
    'django.middleware.csrf.CsrfViewMiddleware',  # 开启CSRF防护功能
    'django.contrib.auth.middleware.AuthenticationMiddleware', # 开启内置的用户认证系统
    'django.contrib.messages.middleware.MessageMiddleware', # 开启内置的信息提示功能
    'django.middleware.clickjacking.XFrameOptionsMiddleware', # 防止恶意程序单击劫持
]

### 这里导入数据库连接要求所需的库
WSGI_APPLICATION = 'MyDjango.wsgi.application'
import django.db.backends.mysql # 在django环境中也可不用导入

# DATABASES = {
#     'default': {
#         'ENGINE': 'django.db.backends.mysql',
#         'NAME': 'django_db',
#         'USER': 'root',
#         'PASSWORD': '1234',
#         'HOST': '127.0.0.1',
#         'PORT': '3306',
#     }
# }
# 多数据库连接 
'''
支持mysql,sqlite3,PostgreSQL,Oracle外还支持SQL Server和MongoDB
项目中定义了多个模型,每个模型对应的数据表可以选择在某个数据库中生成,如果模型没有指定数据库
则模型就会在key为default的数据库中生成
'''
DATABASES = {
# 第一个数据库
'mysql': {
        'ENGINE': 'django.db.backends.mysql', #  django db backends mysql base.py这个是查看mysqlclient的版本要求
        'NAME': 'django_db',
        'USER':'root',
        'PASSWORD':'10xxxxkang',
        'HOST':'127.0.0.1',
        'PORT':'3306',
    },
# 第二个数据库
'MyDjango': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'mydjango_db',
        'USER':'root',
        'PASSWORD':'1234',
        'HOST':'127.0.0.1',
        'PORT':'3306',
    },
# 第三个数据库
'default': { #  raise ImproperlyConfigured("You must define a '%s' database." % DEFAULT_DB_ALIAS)
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'sqlite3'),
    },
}


# 这个url名字可以自己随便取
STATIC_URL = '/jhkstatic/' # 设置静态资源路径url(静态资源路由地址)
# 设置根目录的静态资源文件夹static
# 静态资源集合;可设置多个静态资源
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static'),
                    # 设置App(index)的静态资源文件夹Mystatic
                    os.path.join(BASE_DIR, 'index/Mystatic'),]
# 还有STATIC_ROOT(静态资源部署;实现服务器和项目之间的映射。);STATIC_ROOT手机整个项目的静态资源并存放在一个新的文件夹中
# 然后由该文件夹与服务器之间构建映射关序;DEBUG为TRUE时,Django会自动提供静态文件代理服务。
# DEBUG为false时,则表示项目进入了生产环境,可以使用Django操作指令collectstatic来收集所有静态资源。
# 设置媒体路由地址信息
MEDIA_URL = '/media/'
# 获取media文件夹的完整路径信息
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

pymysql连接mysql数据库
那到底连接上了数据库,要如何操作呢,不是已经有了django shell么

import pymysql
pymysql.install_as_MySQLdb() # django db backends mysql base.py

urls.py

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', index),
    # 一般最后一项逆向解析的名称可填可不填{'document_root': settings.MEDIA_ROOT}, name='media')
    re_path('media/(?P<path>.*)', serve, {'document_root': settings.MEDIA_ROOT}, name='media'),
]

第三章 Django的路由设置

路由定义规则

urlpatterns = [
    # 指向内置admin系统的路由文件sites.py
    path('admin/', admin.site.urls),
    # 指向index的路由文件urls.py
    path('', include('index.urls')),
]

urlpatterns = [
    # 指向内置admin系统的路由文件sites.py
    url('admin/', admin.site.urls),
    # 指向index的路由文件urls.py
    url('^', include('index.urls')), # ^表示当前路由的相对地址
] 

urlpatterns = [
    url('^$', views.index), # ^$一定要写对于django1.x,^代表当前是相对路由,$代表路由结尾s
    url('^new/$', views.new) # 具体的路由还是看app文件夹下的urls,py定义
]

路由变量的设定

urlpatterns = [
    # 添加带有
    # 路由变量的设置尖括号<>;冒号(:);冒号前是变量的数据类型,冒号后是变量名
    path('<year>/<int:month>/<slug:day>', views.myvariable),
    # 添加路由地址信息外的变量month
    path('', views.index, {'month': '2019/10/10','happy':'[111]'}), # 最后一个参数必须是字典,设置的参数只能在视图函数中读取和使用
    path('<month>/<happy>',views.index) # 一个视图函数作用在两个路由上
    # 参数值没有数据格式限制
]
'''
字符类型:匹配任何非空字符串,但不包含斜杠。如果没有指定类型,就默认使用该类型。
整型:匹配0和正整数
slug:可理解为注释,后缀或附属等概念,常作为路由的解释性字符。可匹配任何ASCII字符以及连接符和下画线,能使路由更加清晰易懂。
比如标题13岁的孩子可设置为13-sui-de-hai-zi
uuid:匹配一个uuid的对象。为了防止冲突,规定必须使用"-"并且所有字母都小写。如079212d3-121-417e-2a21-1asd
'''

正则表达式的路由定义

urlpatterns = [# 路由设置的变量可在视图函数里以参数的形式使用
# re_path('()')正则以小括号为单位,?P为开头
re_path('(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})/', views.mydate), 
# 去掉.html加/,/后可加任意参数不改变路由页面,应该可以以数字或字符串终结
]
'''
# 正则表达式来定义路由,是re_path函数
?P是固定格式,字母P必须大写
一般url的最后一项需要加终止符号,不加的话你可在url末尾添加任何东西,返回的还是当前页面
一般的终止符号为/和.html
'''

命名空间与路由命名

### 主项目下的路由

from django.contrib import admin
from django.urls import path, include
urlpatterns = [
    # 指向内置admin系统的路由文件sites.py
    path('admin/', admin.site.urls),
    # 指向index的路由文件urls.py;include函数的namespace指向的就是当前path()括号中的路由命名
    path('', include(('index.urls','index'),namespace='index')), # namespace是命名空间,是include的特有参数
    # include设有参数arg和namespace(并不写在include函数中),参数arg执行项目应用APP的urls.py文件,其数据以元组或字符串表示,可选参数namespace是路由的命名空间
    # 指向user的路由文件urls.py
    # 若对参数设置命名空间,则参数arg必须以元组格式表示,元组的长度必须为2
    # arg参数的第一个元素为项目应用的urls.py文件,第二个元素可自行命名,一般不能为空,一般情况是以项目应用的名称进行命名
    path('user/', include(('user.urls', 'user'), namespace='user'))
]

'''
写了命名空间,而不提供arg参数中的第二个元素,就会出现如下报错信息
'Specifying a namespace in include() without providing an app_name '

include函数的作用
它是将当前路由分配到某个项目应用的urls.py文件。而项目应用的urls.py文件可以设置多条路由,这种情况类似计算机的文件夹A,并且该文件夹下包含多个子
文件夹,而Django的命名空间namespace相当于对文件夹A进行命名
举个例子就是:path("",include('index.url',xxx),namespace=index),此时的index是路由127.0.0.1的命名,若是在path中不加后缀,多个路由空间命名就会重复
include函数的定义过程在django/urls/conf.py
'''
### 应用下的路由
from django.urls import re_path, path
from . import views
urlpatterns = [
    re_path('(?P<year>[0-9]{4}).html', views.mydate, name='mydate'),
    path('index', views.index, name='index')
]

'''
路由命名name是属于path()和re_path()函数的可选参数,与include()函数的可选参数命名空间namespace是不一样的
'''

路由的使用方式

在模板中使用路由

## 探索版本
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Hello World</title>
</head>
<body>
    {# 添加错误代码static#}
    {#{% static %}#}
    {# 添加正确代码,但不出现在网页 #}
    {# <div>Hi,{{ value }}</div> #}
    <span>Hello World!!</span>
    <!--有个问题,模板中如何加入变量-->
    <p>{% url 'index:mydate' '2222' %}会直接显示链接么;对于传入参数的链接,先写死,还是不行,写死不可以,还是要在这里传递参数</p>
    <a href="{% url 'index:index' %}">都有index会使用哪一个呢,命名空间,路由命名,没一个可以的,这个需要设置命名空间,一旦你设立的话</a>
</body>
</html>



## 书上版本
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Hello World</title>
</head>
<body>
    <span>Hello World!!</span>
    <br>
    {# 这个是注释么  #}
    {#<a href="{% url 'mydate' '2021' '10' '10' %}">查看日期,设置命名空间就无法用了么</a> #}
    <a href="{% url 'index:mydate' %}">查看日期,一定要加路由命名加了命名空间的话</a>
</body>
</html>

反向解析reverse与resolve

from django.http import HttpResponse
from django.shortcuts import reverse # 通过路由命名或可调用视图对象来生成路由地址的
from django.urls import resolve # 是通过路由地址来获取路由对象信息的

def mydate(request, year, month, day):
    args = ['2019', '12', '12']
    # 源码地址:django/urls/base;还有一个地址,调用具体的属性返回路由对象中的属性
    # django/urls/resolvers.py;使用时需要注意传入的参数类型和返回的参数类型
    result = resolve(reverse('index:mydate', args=args)) # 返回路由对象
    print('kwargs:', result.kwargs) # 以字典格式获取路由的变量信息
    print('url_name:', result.url_name) # 获取路由命名name
    print('namespace:', result.namespace) # 获取路由的命名空间;若是namespaces则返回的数据以列表格式表示
    print('view_name:', result.view_name) # 获取整个路由的名称,包括命名空间
    print('app_name:', result.app_name)# 获取路由函数include的参数arg的第二个元素值
    return HttpResponse(str(year) + '/' + str(month) + '/' + str(day))

def index(request):
    kwargs = {'year': 2010, 'month': 2, 'day': 10} # 字典传递路由地址变量,字典的键必须对应路由地址变量名
    args = ['2019', '12', '12']
    # reverse的源码地址:django/urls/base.py
    # 设有参数viewname,代表路由命名或可调用视图对象,一般情况下是以路由命名name来生成路由地址的
    print(reverse('index:mydate', args=args))
    print(reverse('index:mydate', kwargs=kwargs))
    return HttpResponse(reverse('index:mydate', args=args)) # 以列表方式传递路由地址变量

路由重定向

网页重定向有两种方式
1.视图类RedirectView重定向
2.路由重定向

1.可以在urls.py中使用路由重定向,使用视图类,当然视图类也可用在views.py中,而且一般都是用在views.py中的
from django.urls import path
from . import views
from django.views.generic import RedirectView # 内置的RedirectView视图类;重定向也就是网页跳转
# RedirectView使用必须加as_view把RedirectView视图类实例化
urlpatterns = [
    # 添加带有字符类型、整型和slug的路由
    path('<year>/<int:month>/<slug:day>', views.mydate, name='mydate'),
    # 定义首页的路由
    path('', views.index, name='index'),
    # 设置路由跳转;as_view把RedirectView视图类实例化;url参数用于设置网页跳转的url,'/'代表网站首页
    path('turnTo', RedirectView.as_view(url='/'), name='turnTo'),
    # path('turnTo', RedirectView.as_view(pattern_name='index:index'), name='turnTo'),
]
2.
from django.http import HttpResponse
from django.shortcuts import redirect # 实现网页重定向
from django.shortcuts import reverse

def mydate(request, year, month, day):
    return HttpResponse(str(year) + '/' + str(month) + '/' + str(day))

def index(request):
    # 删除下面这句话重定向之后的页面没法显示
    print(reverse('index:turnTo'))  # 重定向的话就是设置下总的urls,用某个类,在顶一下名字,但那个名字在视图函数中又该如何应用
    return redirect(reverse('index:mydate',args=[2019,12,12]))

第四章 探究FBV视图

应该是第四第五章简介
第四章https://www.cnblogs.com/wkhzwmr/p/15639701.html

第五章 探究CBV视图

https://www.cnblogs.com/wkhzwmr/p/15634153.html

第6章 深入模板

https://www.cnblogs.com/wkhzwmr/p/15589934.html

第7章 模型与数据库

https://www.cnblogs.com/wkhzwmr/p/15589934.html;续集https://www.cnblogs.com/wkhzwmr/p/15592602.html

第8章 表单与模型

https://www.cnblogs.com/wkhzwmr/p/15657317.html

第9章 Admin后台系统

https://www.cnblogs.com/wkhzwmr/p/15594615.html

第10章 Auth认证系统

https://www.cnblogs.com/wkhzwmr/p/15608359.html

第11章 常用的Web应用程序

https://www.cnblogs.com/wkhzwmr/p/15611443.html

第12章 第三方功能应用

https://www.cnblogs.com/wkhzwmr/p/15658799.html

第13章 信息反馈平台

源码地址待传

第14章 博客系统的开发(类似多人博客)

https://gitee.com/qitu1024/blog

第15章 音乐网站平台的开发

https://gitee.com/qitu1024/online-music-website

第16章 前后端分离与微服务架构

手抄笔记,待整理

第17章 Django项目上线部署

待写博客

posted @ 2021-12-08 20:01  索匣  阅读(182)  评论(0编辑  收藏  举报