• Django02


    一:django目录介绍

    - django001:			项目名
        - app01:			app名字
            migrations:		数据库变更相关记录
            admin.py:		后台管理
            apps.py:		app的相关配置
            models.py:		数据库相关
            tests.py:		测试相关
            views.py:		视图函数
    
        - django001:		和项目名同名的目录
            settings.py:	配置文件
            urls.py:		总路由
            wsgi.py:		wsgi服务器配置
    
        - templates:		模板文件(一堆HTML)
        
        - manage.py:		启动项目、创建app、各种命令的操作
    

    二:app介绍

    app就是一个独立的功能,一个包

    1.创建app

    python3 manage.py startapp app名字
    

    2.作用

    没有app,完全可以(一般情况下,1个项目,至少有1个app)

    多个app的作用:区分不同的功能(例如:淘宝有 用户相关功能、商品相关功能、订单相关功能,可以放在不同app中)

    • 解耦合,把类似的功能写到一起,组成一个app

    3.创建第二个app

    python3 manage.py startapp 第二个app名字
    

    4.app的注册

    方式1:

    'app01.apps.App01Config'
    

    方式2:

    'app01'
    

    三:django的启动方式

    1.方式1 - PyCharm

    点击运行

    如果不行,就进行如下设置

    2.manage.py

    python3 manage.py runserver 127.0.0.1:8000
    
    python3 manage.py runserver 8000				# 不指定IP地址,默认就是本地地址 
    
    python3 manage.py runserver 0.0.0.0:8000		# 外部网络亦可访问
    

    3.django的socket

    在django中,默认情况下,使用的socket是wsgiref,性能很低,仅用于测试

    真正后期上线的时候,需要使用性能更高的web服务器:uwsgi

    了解:cgi, fastcgi, wsgi, uWSGI, uwsgi, wsgiref

    四:配置文件详解

    import os
    
    # BASE_DIR:项目的根路径
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    
    # SECRET_KEY:密钥,项目中默认的一些加密 会用到它(可以改,但不能删)
    SECRET_KEY = 'ov7178+j+$e4x$_vui@f1)o@ymm963-96^%6zh+spq-yy2ws@*'
    
    # DEBUG:调试模式,开发阶段是True,上线阶段是False。
    # 如果设置成True的话,可以看到响应的提示和路径,报错信息更完善。
    DEBUG = True
    
    # ALLOWED_HOSTS:上线阶段使用,允许谁访问,*表示全部
    ALLOWED_HOSTS = []
    
    # INSTALLED_APPS项目所有的app,是一个列表,新增的app就是在这里注册的
    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'app01.apps.App01Config',
    ]
    
    # MIDDLEWARE:中间件
    MIDDLEWARE = [
        'django.middleware.security.SecurityMiddleware',
        'django.contrib.sessions.middleware.SessionMiddleware',
        'django.middleware.common.CommonMiddleware',
        'django.middleware.csrf.CsrfViewMiddleware',
        'django.contrib.auth.middleware.AuthenticationMiddleware',
        'django.contrib.messages.middleware.MessageMiddleware',
        'django.middleware.clickjacking.XFrameOptionsMiddleware',
    ]
    
    # ROOT_URLCONF:根路由的文件地址,位置是可以改变的
    ROOT_URLCONF = 'django001.urls'
    
    # TEMPLATES:模板文件存放路径
    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [os.path.join(BASE_DIR, 'templates')]	# 重点看这里,这个路径是一个列表,django-admin创建的django项目,需要手动配置
            ,
            'APP_DIRS': True,
            'OPTIONS': {
                'context_processors': [
                    'django.template.context_processors.debug',
                    'django.template.context_processors.request',
                    'django.contrib.auth.context_processors.auth',
                    'django.contrib.messages.context_processors.messages',
                ],
            },
        },
    ]
    
    # WSGI_APPLICATION:wsgi服务器使用的是哪个
    WSGI_APPLICATION = 'django001.wsgi.application'
    
    # DATABASES:数据库连接配置
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        }
    }
    
    # AUTH_PASSWORD_VALIDATORS:一些模块,内置模块、内置app相关
    AUTH_PASSWORD_VALIDATORS = [
        {
            'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
        },
        {
            'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
        },
        {
            'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
        },
        {
            'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
        },
    ]
    
    # 国际化相关:语言和时区
    LANGUAGE_CODE = 'en-us'
    TIME_ZONE = 'UTC'
    USE_I18N = True
    USE_L10N = True
    USE_TZ = True
    
    # STATIC_URL:静态文件配置相关
    STATIC_URL = '/static/'
    

    重点

    1.数据库

    2.静态文件相关

    3.根路由

    4.模板文件

    5.是否是调试模式

    6.app是否注册

    五:路由简单入门

    路由:地址 与 视图函数 的映射关系 —— uels.py

    # urlpatterns列表:列表内放了url函数的执行结果
    # 使用很简单,复制一行,改一下第一个参数(带有正则表达式的路径)和第二个参数(对应的视图函数内存地址)
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        # 在内部,请求来了,路径匹配成功,内部自动调用index(request),把request传入
        url(r'^index/', view.index),
    ]
    

    六:视图简单入门

    1.视图函数:views.py

    可以不放在views.py中,但是通常放在里面

    2.请求对象

    • request.method —— get、post

    • request.GET —— 当做字典来用

    • request.POST —— post形式传递的参数

    post请求可不可以在请求地址中携带数据?

    可以

    # request必须传,约定俗称都使用request
    # request是一个对象,请求的对象。请求过来的是符合HTTP协议的数据包(字符串)
    # django把HTTP请求,拆分、封装到看request对象中
    # 拆HTTP:1.字符串拆成字典(wsgiref做的)2.封装到request对象中
    # request对象中一定有档次HTTP请求的所有东西:请求地址、请求方式、请求头、请求体
    def index(request):
        # 1.请求方式(常用:GET、POST)浏览器地址栏中发出的都是GET请求
        print(request.method)
    
        # 2.请求的参数:get请求是这种形式:http://127.0.0.1/index?name=Darker&age=18
        print(request.GET)          # 把它当成字典
        # print(request.GET.get('name'))
        print(request.GET['name'])  # 可能会报错,所以推荐用get取值
        # print(request.GET.get('age'))
    
        # 3.POST形式提交的数据(数据存放在请求体(body体)中)
        print(request.POST)         # 把它当成字典
    
    
        return HttpResponse('OK')
    

    3.响应对象

    ① HttpResponse(一个类):返回字符串形式

    return HttpResponse('<h1>Hello World</h1>')
    

    ② render(一个函数,返回HttpResponse的对象):返回模板文件

    return render(request, 'index.html')
    

    ③ redirect(一个函数,返回HttpResponse的对象):重定向

    return redirect('/index')
    return redirect('http://www.xuexianqi.top')
    

    七:静态文件配置

    静态文件:jscssimg

    1.去settings.py中配置

    # 静态文件配置相关
    STATIC_URL = '/static/'
    
    # 再配一个 STATICFILES_DIRS=列表(列表内写路径)
    STATICFILES_DIRS = (
        os.path.join(BASE_DIR, 'static'),  # 真实的静态文件路径
    )
    

    2.新建一个static文件夹

    在该文件夹下,新建:imgcssjs文件夹。

    以后,在相应的目录,放相应的代码。

    3.在模板的HTML中使用

    <script src='/static/jquery.js'></script>
    

    4.静态文件的本质

    STATIC_URL = '/static/'其实就是开了一个隐藏的路由

    八:简单的登录功能

    路由

    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^login/', views.login),
        url(r'^$', views.login),
        url(r'^index/', views.index),
    ]
    

    视图函数

    def login(request):
        if request.method == 'GET':
            return render(request, 'login.html')
        else:
            username = request.POST.get('username')
            password = request.POST.get('password')
            # 创建数据库连接
            conn = pymysql.connect(
                host='127.0.0.1',
                user='root',
                database='userinfo',
                port=3306
            )
            # 拿到1个游标
            cursor = conn.cursor()
            # 执行sql
            cursor.execute('select * from user where username=%s and password=%s', (username, password))
            # 获取结果
            ret = cursor.fetchone()
            print(ret)
            if ret:
                # return redirect('/index')
                return render(request, 'index.html')
            else:
                return HttpResponse('账号或密码错误!')
    
    
    def index(request):
        return render(request, 'index.html')
    

    九:MTV与MVC

    MVC架构 - 主流的web框架

    Web服务器开发领域里著名的MVC模式,所谓MVC就是把Web应用分为模型(M),控制器(C)和视图(V)三层,它们之间以一种插件式的、松耦合的方式连接在一起,模型负责业务对象与数据库的映射(ORM),视图负责与用户的交互(页面),控制器接受用户的输入调用模型和视图完成用户的请求。

    Web应用分为模型(M)、视图(V)、控制器(C)
    • M - Model:数据库相关操作
    • C - Controler:控制器,逻辑相关,逻辑代码
    • V - View:视图,模板文件

    MVC结构

    MVT架构 - Django的框架

    Django的MTV模式本质上和MVC是一样的,也是为了各组件间保持松耦合关系,只是定义上有些许不同

    • M - Model(模型):数据库相关操作,负责业务对象和数据库的关系映射(ORM)
    • T - Template(模板):(就是MVC的V层)负责如何把页面展示给用户(html)
    • V - View(视图):(路由+V=MVC的控制器)负责业务逻辑,并在适当时候调用Model和Template

    除了以上三层之外,还需要一个URL分发器,它的作用是将一个个URL的页面请求分发给不同的View处理,View再调用相应的Model和Template,MTV的响应模式如下所示

    MVT结构

    一般是用户通过浏览器向我们的服务器发起一个请求(request),这个请求回去访问视图函数,(如果不涉及到数据调用,那么这个时候视图函数返回一个模板也就是一个网页给用户)。

    视图函数调用模型,模型去数据库查找数据,然后逐级返回,视图函数把返回的数据填充到模板中空格中,最后返回网页给用户。

    十:django请求生命周期

    同步框架的并发量:峰值 - 300

    0.近几年Python中的几个框架:Sanic、FastAPI(异步框架)

    1.Python中的web服务器都符合wsgi协议

    2.web服务器

    任何语言都会有一个web服务器,负责把HTTP请求转换成这门语言的变量

    Python:wsgiref(性能很低)、uwsgi(C语言写的),200多并发量

    Java:Tomcat、jboss(300多并发量)

    PHP:php服务器

    3.django生命周期

    十一:虚拟环境讲解,pycharm配置

    虚拟环境详解:http://www.xuexianqi.top/archives/126.html

    1.虚拟环境的作用

    隔离项目,每个项目有自己依赖的模块和包。不同的模块和包的版本就不会相互影响。

    2.PyCharm中配置虚拟环境

    十二:ORM概述

    1.什么是ORM?

    Object Relational Mapping,简称ORM,是对象关系映射(和语言无关)

    数据库中的表 - 对应程序的一个类

    数据库中的一行数据 - 对用程序中的一个对象

    2.Python中常见的ORM框架

    Django的ORM框架

    sqlachemy ORM框架

    3.Java:(扩展),Java中写web框架

    ssh框架:spring + structs(有漏洞) + hibernate(ORM框架)
    ssm框架:spring + springMVC + mybatis(ORM框架,可以写原生sql)
    springboot:sb框架(全家桶),内置了Tomcat
    springcould:微服务

    4.ORM可以做的事

    • 创建表(但是不能创建数据库,只能手动创建数据库)
    • 增加删除表内字段
    • 增删改查数据

    十三:django中orm的使用

    1.创建UserInfo表 - 在models.py中写一个类

    2.表中有字段(类属性)

    第一步:models中书写类

    from django.db import models
    
    
    # 一定要继承
    class UserInfo(models.Model):
        # 字段属性==》由后面的对象决定
        # 该字段自增,并且是主键
        id = models.AutoField(primary_key=True)
        # 该字段是varchar类型,长度是32(唯一约束,是否是索引,默认值是什么,是否可以为空)
        name = models.CharField(max_length=32)
        # 密码字段
        password = models.CharField(max_length=64)
    

    第二步:执行数据迁移命令

    python3 manage.py makemigrations	# 会在migrations文件夹下创建一条记录
    python3 manage.py migrate
    
  • 相关阅读:
    四则运算2
    大二第二学期阅读计划
    第一周课堂练习
    《人月神话》读后感
    软件工程概论总结第十一章
    软件工程概论总结第十章
    软件工程概论总结第九章
    软件工程概论总结第八章
    软件工程概论总结第七章
    第五章、软件过程中的形式化方法
  • 原文地址:https://www.cnblogs.com/xuexianqi/p/13844848.html
Copyright © 2020-2023  润新知