Python之Django框架(一)

Django project

前言:

官方文档:https://docs.djangoproject.com/zh-hans/3.0/

Python之Django框架(一)_第1张图片

注意:Python Web的基础服务架构有两大分支,WSGI和ASGI。目前来看,所以的Web架构都支持WSGI,对于Django而言,2.x版本没有ASGI, 3.X有ASGI.(网关接口是用于Web应用与Web服务器进行通讯。其中WSGI、ASGI是专为python设计的网关接口。uwsgi是uWSGI服务器自有的传输协议 .)

拓展:

Web服务器网关接口(Python Web Server Gateway Interface),缩写为WSGI,它是一种专为python定义的接口规范,用于web服务端和web应用(框架)之间的连接通俗的理解,WSGI也是一种规范协议,

异步网关接口(Asynchronous Server Gateway Interface),是WSGI的扩展版本,旨在为Python Web服务、框架和应用之间提供一个标准的异步接口。其本身可以提供同步和异步应用,并且可以并行处理。还能处理多种通用协议,包括HTTP,HTTP2和WebSocket。

1.创建空白项目

Python之Django框架(一)_第2张图片

点击“Create"

[外链图Python之Django框架(一)_第3张图片

拓展:

激活Django环境

Python之Django框架(一)_第4张图片

Python之Django框架(一)_第5张图片

2.安装django包

Python之Django框架(一)_第6张图片

[拓展]:在django的交互环境里查看版本

Python之Django框架(一)_第7张图片

在python.console里面也可以验证

Python之Django框架(一)_第8张图片

2.1 django-admin命令

Python之Django框架(一)_第9张图片

3.创建应用

Python之Django框架(一)_第10张图片

Python之Django框架(一)_第11张图片

Python之Django框架(一)_第12张图片

Python之Django框架(一)_第13张图片

manage.py:一个让你用各种方式管理Django项目的命令行工具

# 原始建法
django-admin startapp 

# 当用manage.py脚本后
python manage.py startapp

Python之Django框架(一)_第14张图片

4.启动项目

Python之Django框架(一)_第15张图片

还可以自定义端口

Python之Django框架(一)_第16张图片

也可以指定IP的绑定的host:

python manage.py runserver 0:9000

0:表示0.0.0.0,绑定当前host主机的实际IP地址

在浏览器中,如果要访问本地的IP地址,可以访问:
- http://localhost:9000
- http://127.0.0.1:9000
- http://(通过终端查询到的ip地址):9000

[注意]

修改主工程目录下的settings.py文件

ALLOWED_HOSTS = ['*']    # 白名单

Python之Django框架(一)_第17张图片

4.创建登录应用

python manage.py startapp login

Python之Django框架(一)_第18张图片

应用目录结构:
- migrations 包含所有生成当前应用的数据模型迁移文件脚本
- apps.py 应用的配置信息
- admin.py 配置站点下的应用信息
- models.py 应用的所有模型类声明所在的脚本
- tests.py 应用测试的脚本
- views.py 应用的所有Web接口
- Django采用 MVC设计思想,设计出自己的MTV,字母一一对应。m对m,v对t,c对v
- 在views中,角色是Controller控制器,通过Models将数据加载出来,再通过T(emplate)模板将数据渲染出来,最后将渲染后的HTML封装成Response响应对象返回给Django框架
- models数据模型,采用了ORM框架,实现数据的CURD操作。同时支持模型之间的外键关联操作
- template 将数据渲染出来

5.应用

5.1 创建Web接口

在login应用中的views.py里,写如下代码

from django.http import HttpResponse
from django.shortcuts import render

# Create your views here.

def index(request):
    return HttpResponse('hello world')

在主工程的主路由里面,添加如下代码,并启动

Python之Django框架(一)_第19张图片

效果展示:

Python之Django框架(一)_第20张图片

还可以创建子路由来访问Web

- 使用子路由时,将子路由添加到主路由里

主路由修改:

Python之Django框架(一)_第21张图片

子路由修改

Python之Django框架(一)_第22张图片

login里views里的接口修改:

Python之Django框架(一)_第23张图片

重写启动项目,效果如下:

Python之Django框架(一)_第24张图片
Python之Django框架(一)_第25张图片

[注意] view处理函数的参数必须包含request,它是WSGIRequest类的实例,也是HttpRequest的子类。可以从request对象中获取客户端请求的路径以及请求头和body数据。

Python之Django框架(一)_第26张图片

5.2 配置数据库信息

Python之Django框架(一)_第27张图片

Python之Django框架(一)_第28张图片

5.3 写models

需要注意的点:

Python之Django框架(一)_第29张图片

第一步,配置数据库,采用默认的数据库sqlite3(后面可替换成其他数据库)

Python之Django框架(一)_第30张图片

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

第二步,创建模型类,在login模块的models.py添加如下代码:

class User(models.Model):
    # 默认情况下,存在id字段
    # 也就是说不设置主键,它会自己添加一个id字段,下行中设置了主键,数据表中就不会出现默认的id字段了
    user_id = models.IntegerField(primary_key=True)
    # 最大20个字符,不重复
    name = models.CharField(max_length=20,unique=True)
    pwd = models.CharField(max_length=100)

第三步,在主设置配置

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'login',
]

Python之Django框架(一)_第31张图片

第四步,生成数据表(模型类)的迁移文件

python manage.py makemigrations

[注意] 确认模型类所在的app是否添加到settings.py的INSTALLED_APPS列表中。(即做第四步的时候要完成第三步)

Python之Django框架(一)_第32张图片

第五步,执行数据模型类的迁移文件

python manage.py migrate

Python之Django框架(一)_第33张图片

[注意]:1.打开表的时候,需要reload刷新一下

​ 2.此时表名的以"模块名_类名"命名的

Python之Django框架(一)_第34张图片

【注意1】 第一次迁移时,会自动迁移django自带app下的迁移文件

【注意2】 如果修改了模型类,必须要’makemigrations’和’migrate’操作

python manage.py makemigrations
python manage.py migrate

5.4 修改模型

phone = models.CharField(max_length=11,null=True)
email = models.CharField(max_length=50,null=True)

Python之Django框架(一)_第35张图片

Python之Django框架(一)_第36张图片

Python之Django框架(一)_第37张图片

Python之Django框架(一)_第38张图片

拓展一下:

Python之Django框架(一)_第39张图片

5.5生成SQL语句

python manage.py sqlmigrate 应用名  编号

Python之Django框架(一)_第40张图片

Python之Django框架(一)_第41张图片

5.6 shell调试模型

Python之Django框架(一)_第42张图片

添加两条数据,进行测试

Python之Django框架(一)_第43张图片

拓展:

Python之Django框架(一)_第44张图片

命令:

python manage.py shell
>>> from login.models import User
>>> User.objects.all()

Python之Django框架(一)_第45张图片

【注意】objects是什么?

- objects是Model的元类中创建Manage类的实例,也是QuerySet查询结果类实例
- objects提供了对模型的查询相关方法

Python之Django框架(一)_第46张图片

5.6.1 模型类操作

查询数据

User.objects.all()查询所有的数据,返回可迭代的对象(QuerySet实例),元素是模型类的实例对象。

issubclass() 方法用于判断参数 class 是否是类型参数 classinfo 的子类。

Python之Django框架(一)_第47张图片

查看QuerySet的方法

Python之Django框架(一)_第48张图片

Python之Django框架(一)_第49张图片

QuerySet常用的实例方法
- all()  全部查询
- first() 查第一个
- last()  查最后一个
- get(属性名=属性值)  查指定的    # pk主键列名属性
- delete()   删除
- filter(属性名=属性值) 过滤查询
- count()  统计记录个数

Python之Django框架(一)_第50张图片

5.6.2 创建模型类实例
# 方式一
>>> u1 = User(name='a',pwd='1',phone='123345')
>>> u1.save()
# 方式二
>>> u3 = User()
>>> u3.name='ee'
>>> u3.pwd='133'
>>> u3.phone='5433'
>>> u3.save()

Python之Django框架(一)_第51张图片

Python之Django框架(一)_第52张图片

模型类实例方法:

- save() 保存数据
- delete() 删除数据
- refresh_from_db() 同步数据 (从数据库的表中更新当前实例的属性)

Python之Django框架(一)_第53张图片

Python之Django框架(一)_第54张图片

Python之Django框架(一)_第55张图片

你可能感兴趣的:(django,python)