启动Django

下载

pip3 install django==1.11.11

创建django项目

django-admin startproject 项目名(mysite)

启动django项目

cd 项目名(mysite)
python3 manage.py runserver IP:PORT

创建app应用

python3 manage.py startapp 应用名(app01)
  • django本身类似一个空壳子,真正的功能是由各个应用组成的

django主要文件介绍

mysite/
|-- app01/  # 应用
|   |-- migrations/  # 数据迁移记录
|   |-- admin.py  # django后台管理
|   |-- apps.py  # 用于app注册使用
|   |-- models.py  # 专门用于操作数据库模型类(orm)
|   |-- test.py  # 测试文件
|   |-- view.py  # 视图函数(视图层)
|-- mysite/
|    |-- settings.py  # 项目配置文件
|     |-- urls.py  # 路由与视图函数对应关系(路由层)
|     |-- wsgi.py  # wsgiref模块(不考虑)
|-- static/  # 静态文件(css、js、jpg)
|-- templates/  # 模版层
|-- manage.py  #  django的入口文件
|-- db.sqlite3  # django自带的小型数据库(启动之后才会生成的文件)

注意:

  • 如果命令行创建不会自动有templates文件夹,需要自己创建而pycharm会自动帮你创建
  • 如果是命令行创建需要在settings.py文件下第57行,添加配置路径
  • 如果是命令行创建需要在settings.py文件下第37行下面添加'app01.apps.App01Config',
  • 如果是pycharm创建运行可能会报错,需将settings.py文件下第57行/改成逗号
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
]

静态文件配置

# 在settings.py最下面
# 静态文件资源访问接口固定配置
    STATICFILES_DIRS = [
        os.path.join(BASE_DIR, 'static')
    ]

接口前缀动态绑定

  {% load static %}
  <link rel="stylesheet" href="{% static 'bootstrap-3.3.7-dist/css/bootstrap.min.css' %}">

Request对象方法

  • request.method:获取请求方法
  • request.GET or request.POST:获取GET or POST请求参数,字典形式。
  • request.POST.get('name',default=None):获取POST请求参数
  • request.GET.getlist('name',default=None): 获取GET参数列表
  • request.META:包含当前HTTP请求的Headers头部信息, 字典形式。键值KEY都是大写。比如request.META['REMOTE_ADDR']可获取用户远程IP地址。
  • request.user:获取当前访问用户的所有信息。
  • request.path:获取当前访问路径

Django必会

HttpResponse

理解为可以返回给前端浏览器文本类的数据(字符串类型)

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

render

返回给前端浏览器html页面,并且提供模板语法

def index(request):
    # 视图函数必须要接受一个形参request
    index= {'username':'kevin','age':18}

    # 第一种传值方式:更加的精确 节省资源(精准传(复杂但节省资源))
    # return render(request,'index.html',{'data':user_dict,'date':123})

    # 第二种传值方式:当你要传的数据特别多的时候(范围传(简单但不节省资源))
    """locals会将所在的名称空间中所有的名字全部传递给html页面"""
    return render(request,'index.html',locals())

redirect

重定向

def index(request):
    return redirect('https://www.changchen.cc')

Django连接MySQL

# 1.找到默认配置
    DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
# 2.修改配置
      DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': '数据库名',
        'HOST': '127.0.0.1',
        'PORT': 3306,
        'USER': 'root',
        'PASSWORD': '',
    }

Django ORM

什么是ORM

​ 对象关系映射(Object Relational Mapping,简称ORM)简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。ORM在业务逻辑层和数据库层之间充当了桥梁的作用

# 在与 settings.py 同级目录下的 __init__.py 中引入模块和进行配置
import pymysql
pymysql.install_as_MySQLdb()

创建模型

class Users(models.Model):
    cid = models.AutoField(primary_key=True)
    # 等价于:cid int primary key auto_increment
    name = models.CharField(max_length=32)
    # 等价于:name varchar(32)
    pwd = models.IntegerField()  
    # 等价于:pwd int

执行数据库迁移命令

python3 manage.py makemigrations  # 记录操作
python3 manage.py migrate  # 将操作迁移到数据库

补充:

  • 第一次执行迁移命令 django还会自动创建一些默认需要使用到的表。
  • 为了区分不同应用下可能会出现相同的表名,所以自动加上了应用的前缀。
  • 表的主键可以不写 orm会自动帮你写一个名为id的主键
  • 每次修改了跟数据库相关的python代码,都需要重新执行迁移命令

数据操作

在需从 app01 目录引入 models.py 文件

from app01 import models

user_obj = models.Users.objects.create(name='kevin',pwd=123)
# 可以通过 对象.字段名 获取值
print(user_obj.cid)

models.Users.objects.filter(cid=1)

models.Users.objects.filter(cid=1).update(name='kevin666')

models.Users.objects.filter(cid=1).delete()

django请求生命周期流程图

扩展知识点

​ 浏览器向后端发送请求,在经过 Django 中间件之后,会先从缓存数据库寻找数据,如果没有则向后端数据库要数据。后端返回数据结果的同时在缓存数据库保存一份,类似于 DNS 解析过程,提高效率和响应时间

Last modification:May 29, 2022
如果觉得我的文章对你有用,请随意赞赏