Django学习笔记:Bootstrap/FontAwesome,项目配置与使用步骤(最后),HTTP响应,jinja2,App,ORM,GET与POST传输

Bootstrap样例: https://v3.bootcss.com/

Fontawesome 图标查找: http://fontawesome.dashgame.com/ 

Django采用MVC软件设计模式,模型M,试图V和控制器C

可以在腾讯云Cloud Studio中运行Django

安装Django -> pip install Django ->最新版的,指定版本用e.g. pip install django==2.1.4 (支持python3.7)

cmd输入python进入python框,import django说明安装成功,django.ger_version()获取Django版本号

创建django项目:

方式一:命令行创建

cmd输入django-admin

cmd用cd进入你想产生django项目的文件

cmd输入django-admin startproject <项目名称>

方式二:PyCharm创建

打开PyCharm

File->New project->Django(填项目路径,勾选python.exe文件)->create->注意:要选择open in new window(另外打开的PyCharm窗口,在新窗口中开发)

文件目录解析:

manage.py:所有管理django项目的启动操作等从此开始

mysite文件下:setting.py配置,urls.py所有url管理,wsgi.py网络通信socket

新建Django项目所配置:

Django学习笔记:Bootstrap/FontAwesome,项目配置与使用步骤(最后),HTTP响应,jinja2,App,ORM,GET与POST传输_第1张图片

运行Django:

方式一:

cmd进入Django项目文件下

输入python manage.py runserver

默认:http://127.0.0.1:8000/

不用重复启动,PyCharm保存文件后cmd自动更新

方式二:

PyCharm选中整个项目,点绿三角运行

 

setting.py中的BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))代表每次寻址的根目录(可修改)

编写的代码都是要在服务器(Linux)上运行,所以编写的时候要确保Linux上兼容

'DIRS': [os.path.join(BASE_DIR, 'templates')]  -->告诉Django我用到的html文件都去templates这个目录找

 

e.g.京东为例,浏览器部分不用编码,只需要编写服务器代码。完整的socket连接过程:

Django学习笔记:Bootstrap/FontAwesome,项目配置与使用步骤(最后),HTTP响应,jinja2,App,ORM,GET与POST传输_第2张图片

HTTP服务器响应给客户端格式:

Django学习笔记:Bootstrap/FontAwesome,项目配置与使用步骤(最后),HTTP响应,jinja2,App,ORM,GET与POST传输_第3张图片

Django学习笔记:Bootstrap/FontAwesome,项目配置与使用步骤(最后),HTTP响应,jinja2,App,ORM,GET与POST传输_第4张图片

动态网页本值上都是字符串的替换

字符串替换在服务器端,将替换完的html文件返回传输给浏览器解析

Django学习笔记:Bootstrap/FontAwesome,项目配置与使用步骤(最后),HTTP响应,jinja2,App,ORM,GET与POST传输_第5张图片

wsgiref模块:负责与浏览器socket通信

Django学习笔记:Bootstrap/FontAwesome,项目配置与使用步骤(最后),HTTP响应,jinja2,App,ORM,GET与POST传输_第6张图片

jinja2模块:负责从HTML读取出内容,并且完成字符串的替换

Django学习笔记:Bootstrap/FontAwesome,项目配置与使用步骤(最后),HTTP响应,jinja2,App,ORM,GET与POST传输_第7张图片

PyCharm修改默认Django端口:

Django学习笔记:Bootstrap/FontAwesome,项目配置与使用步骤(最后),HTTP响应,jinja2,App,ORM,GET与POST传输_第8张图片

Django学习笔记:Bootstrap/FontAwesome,项目配置与使用步骤(最后),HTTP响应,jinja2,App,ORM,GET与POST传输_第9张图片

Django中/static/解析:

Django学习笔记:Bootstrap/FontAwesome,项目配置与使用步骤(最后),HTTP响应,jinja2,App,ORM,GET与POST传输_第10张图片

Django学习笔记:Bootstrap/FontAwesome,项目配置与使用步骤(最后),HTTP响应,jinja2,App,ORM,GET与POST传输_第11张图片

App文件解析:

import pymysql
# 告诉Django用pymysql来代替默认的MySQLdb
pymysql.install_as_MySQLdb()

Django学习笔记:Bootstrap/FontAwesome,项目配置与使用步骤(最后),HTTP响应,jinja2,App,ORM,GET与POST传输_第12张图片

views.py放函数的文件;apps.py放与App相关的配置项;tests.py来写测试的;models.py创建类(数据表),ORM只能写在这个文件里,写到别的文简历Django找不到

在创建完App后一定要一定要告诉Django自己新建了一个App(在PyCharm创建新Django项目时可以随手创建一个App)

setting.py文件中的INSTALLED_APPS告诉Django有哪一些App

ORM:python自动生成SQL;

Django学习笔记:Bootstrap/FontAwesome,项目配置与使用步骤(最后),HTTP响应,jinja2,App,ORM,GET与POST传输_第13张图片

ORM对应关系

Django学习笔记:Bootstrap/FontAwesome,项目配置与使用步骤(最后),HTTP响应,jinja2,App,ORM,GET与POST传输_第14张图片

Django学习笔记:Bootstrap/FontAwesome,项目配置与使用步骤(最后),HTTP响应,jinja2,App,ORM,GET与POST传输_第15张图片

setting.py中的DATABASES为数据库相关的配置

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',  # 连接数据库类型
        # 连接数据库的地址
        'HOST': '127.0.0.1',
        # 端口
        'PORT': 3306,
        # 数据库名称
        'NAME': 'test',
        # 用户
        'USER': 'root',
        # 密码
        'PASSWORD': '123',
    }
}

MySQLDB不支持python3;pymysql支持python3

若用python3,则用pymysql代替默认的mysqldb,在app中的__init__.py中加入

import pymysql
# 告诉Django用pymysql来代替默认的MySQLdb
pymysql.install_as_MySQLdb()

在app下面的models.py文件中定义一个类,这个类必须集成models.Model

class UserInfo(models.Model):
    id = models.AutoField(primary_key=True) # 创建一个自增的主键字段
    name = models.CharField(null=False, max_length=20) #创建一个varchar类型的不能为空的字段

mysql查看表结构命令:desc

Django学习笔记:Bootstrap/FontAwesome,项目配置与使用步骤(最后),HTTP响应,jinja2,App,ORM,GET与POST传输_第16张图片

python manage.py makemigrations相当于保存了PyCharm中代码的改动,保存到app/migrations中

而python manage.py migrate才相当于把改动翻译成SQL语句去数据库执行

若用ORM则要从始至终使用ORM,如果用mysql修改创建的话Django中的migrations不能记录,对应则会出现问题

Django使用详细步骤
        1. 安装
            1. Django版本 1.11.xx
            2. 安装方式
                1. 命令行        --> Python环境(双版本,pip的使用)
                2. PyCharm安装
        2. 创建Django项目
            1. 创建方式
                1. 命令行创建方式
                    1. cd到你要保存Django项目的目录
                    2. Django-admin startproject 项目名   --> 会在当前目录创建Django项目
                2. PyCharm创建方式
                    1. File --> new project --> ...
                    2. 创建完之后一定要选在新窗口打开!!!
        3. 配置Django项目
            1. settings.py文件
                1. templates文件夹的位置
                2. 静态文件
                    1. STATIC_URL         --> 静态文件夹的别名(在HTML文件中用的)
                    2. STATICFILES_DIRS   --> 静态文件夹的真正路径
                3. 注释掉 csrf 相关的中间件
                4. Django项目连接的数据库信息
        4. Django WEB请求流程(简版)    
            1. 启动Django项目,等待用户连接
            2. 浏览器在地址栏输入URL,来连接我的Django项目
            3. 在urls.py中 找 路径和函数的 对应关系
            4. 执行对应的函数
            5. 返回响应
        5. views.py
            1. 专门用来定义处理请求的函数
                1. 基本必备三件套
                    from django.shortcuts import HttpResponse, render, redirect
                    1. HttpResponse("要返回的内容")            --> 通常用于直接返回数据
                    2. render(request, "html文件", {"k1": v1}) --> 返回一个HTML文件或者打开文件进行字符串替换
                    3. redirect("URL")                         --> 告诉用户的浏览器去访问其他的URL
            
                2. request相关
                    1. request.method     --> 查看请求的方法
                    2. request.POST       --> 获取POST请求的数据
                    
        6. ORM使用
            1. 什么是ORM? 
                是一种编程的方法论(模型), 和语言无关.(其他的语言也有类似的实现.)
                
            2. ORM的本质:
                类    --->    数据表
                对象  --->    数据行
                属性  --->    字段
                
                按照规定的语法写,自动翻译成对应的SQL语句.
                
            3. ORM的功能:    
                ORM操作数据表
                ORM操作数据行
                
            4. Django里ORM的使用:
                1. 手动创建数据库
                2. 在settings.py里面,配置数据库的连接信息
                    DATABASES = {
                        'default': {
                            'ENGINE': 'django.db.backends.mysql',
                            'NAME': 'day62',
                            'HOST': '127.0.0.1',
                            'PORT': 3306,
                            'USER': 'root',
                            'PASSWORD': '123456',
                        }
                    }
                3. 在项目/__init__.py告诉Django用pymysql模块代替MySQLdb来连接MySQL数据库
                    import pymysql
                    pymysql.install_as_MySQLdb()
                4. 在app/models.py里面定义类
                    # 出版社
                    class Publisher(models.Model):
                        id = models.AutoField(primary_key=True)  # 自增的ID主键
                        # 创建一个varchar(64)的唯一的不为空的字段
                        name = models.CharField(max_length=64, null=False, unique=True)
                5. 执行两个命令
                    1. python manage.py makemigrations   --> 把models.py里面的更改记录到migrations中
                    2. python manage.py migrate  --> 把更改翻译成SQL语句,去数据库执行

 

GET与POST请求:
    1. GET请求和POST请求
        都属于HTTP协议规定的请求方法
        
    2. 什么时候用GET请求?
        1. 浏览器想要得到一个HTML页面的时候
        2. 搜索引擎查询关键字的时候       www.sogo.com/web/?query=迪丽热巴
        
    3. 什么时候用POST?
        1. 向后端提交数据
            1. 大段的数据
            2. 包含隐私的数据
            3. 上传文件
            
    4. 实际中GET和POST的应用场景
        1. GET:
            1. 直接在浏览器地址栏输入URL访问网站
            2. a标签
        2. POST:
            1. 登录注册
            2. 修改(新增)大段的数据
            3. 上传文件

 

ORM操作方式二:

点Tools中的run manage.py Task...

Django学习笔记:Bootstrap/FontAwesome,项目配置与使用步骤(最后),HTTP响应,jinja2,App,ORM,GET与POST传输_第17张图片

接着在底下直接输入makemigrations与migrate就可以

 

ORM外键操作注意事项:

Django学习笔记:Bootstrap/FontAwesome,项目配置与使用步骤(最后),HTTP响应,jinja2,App,ORM,GET与POST传输_第18张图片

外键会自动给加_id

Django学习笔记:Bootstrap/FontAwesome,项目配置与使用步骤(最后),HTTP响应,jinja2,App,ORM,GET与POST传输_第19张图片

PyCharm格式化代码:Code --> Reformat Code 将粘贴过来的代码缩进匹配。

ORM多对多表结构:

Django学习笔记:Bootstrap/FontAwesome,项目配置与使用步骤(最后),HTTP响应,jinja2,App,ORM,GET与POST传输_第20张图片

模板语言:最后一个循环{% forloop.last %}

多对多查询:

Django学习笔记:Bootstrap/FontAwesome,项目配置与使用步骤(最后),HTTP响应,jinja2,App,ORM,GET与POST传输_第21张图片

Django学习笔记:Bootstrap/FontAwesome,项目配置与使用步骤(最后),HTTP响应,jinja2,App,ORM,GET与POST传输_第22张图片

request.POST.getlist("books")  #getlist获取一个列表

多对多相关联表的添加:

Django学习笔记:Bootstrap/FontAwesome,项目配置与使用步骤(最后),HTTP响应,jinja2,App,ORM,GET与POST传输_第23张图片