• 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项目上线部署

    待写博客

  • 相关阅读:
    正点原子的串口助手XCOM V2.0编码问题
    切图设计工具软件或平台
    Notepad++插件
    emWin调用GUI_PNG_Draw方法显示PNG图片
    C语言-结构体冒号(:)位域
    Keil报错:error: #130: expected a "{"
    Doxygen简明注释语法
    Ubuntu连接不上Xshell
    Springboot注解的作用
    idea常用快捷键
  • 原文地址:https://www.cnblogs.com/wkhzwmr/p/15664003.html
Copyright © 2020-2023  润新知