Django简单的使用及一些基础方法 一、静态文件配置 二、请求方式与相应 三、request方法初识 四、Django连接数据库 五、Django orm简介 六、数据迁移(同步) 七、模型表相关操作

1. 什么是静态文件

网站所使用到的提前写的css、js、第三方的前端模块、图片、都叫做静态资源。

只要是变量是写死的,是不可以动态改变的,那这个文件就是静态文件。

2. 静态文件的用法

  1. 默认情况下所有的html文件都是放在templates文件夹内。

  2. 默认情况下网站所用到的静态文件资源全部会放在static文件夹下。

  3. 在static文件夹内部还会再建其他文件夹,为了更加方便的管理文件。

    css   文件夹
    js    文件夹
    font  文件夹
    img   文件夹
    Bootstrap
    fontawesome
    
  4. django中,需要你自己手动创建静态文件存放的文件夹

    # settings 文件中配置 在最后
    
    STATIC_URL = '/static/'  # 访问静态文件资源接口前缀,通常情况下接口前缀的名字也叫static,你也可以设置成任意喜欢的,这其实只是一个地址的后缀而已。
    
    # 手动开设静态文件访问资源,静态资源所在的文件夹路径
    STATICFILES_DIRS = [
        # 将static文件里面所有的资源暴露给用户
        os.path.join(BASE_DIR,'static'), 
        os.path.join(BASE_DIR,'static1'),  
        # os.path.join(BASE_DIR,'static2'),  
    ]
    
  5. 最后在HTML中可以导入static中的css等静态文件。

    <link href="../static/文件夹/文件名" rel="stylesheet"
    

3. 静态文件的动态绑定

如果在实际需求中,需要修改settings中的STATIC_URL的值,那这个时候,所有导入静态文件的文件都需要修改路径了。如果你有很多HTML文件,是不是要一个一个得修改css和js文件的路径?这样岂不是很麻烦?

Django也帮我们做了优化。我们可以在导入静态文件时,使用Django中的模板语言,将STATIC_URL路径动态加载到导入静态文件的路径。这样,不管你STATIC_URL变成了什么值,我都可以通过STATIC_URL这个变量名本身来取它相对应的值了。

也就是说,我不需要知道你变成什么样子,我只要用STATIC_URL这个变量名就好了。

{% load static %}   {# 这里的load就相当于python中的import,而static就是一个模块,这个模块就可以将STATIC_URL导入过来,获取其实时的动态变化的值 #}
<link rel="stylesheet" href="{% static 'bootstrap-3.3.7-dist/css/bootstrap.min.css' %}">
<script src="{% static 'bootstrap-3.3.7-dist/js/bootstrap.min.js' %}"></script>

二、请求方式与相应

1. get请求

(from表单默认是get请求)

http://localhost:8000/login/?username=tbw&password=qwe

  • get 请求也能携带参数
  • 特点:url?xxx=xxx&yyy=yyy
    1. 携带的数据不安全
    2. 携带的数据大小有限制
    3. 通常只会携带一些不是很重要的数据

2. post请求

前期我们在朝后端提交post请求时,如果出现403的情况,有可能你需要去配置文件中注释掉一行内容

# 中间件
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',
]

3. Django后端视图函数处理请求

自定义login接口:

if request.method == 'POST':
    print('接收到POST请求!')
    print('接收到前端期缴的数据为:',request.POST)
    username = request.POST.get('username')
    password = request.POST.get('password')

    # # 默认取出post字典value列表的最后一个元素
    # print(username,type(username))
    # print(password,type(password))

    return HttpResponse('后端已收到!')

# if request.method == 'GET':
print('接收到GET请求!')
return render(request, 'login.html')

三、request方法初识

  1. request.method:获取请求方式,并且是纯大写的字符串

  2. request.POST:获取用户提交的post请求数据

    当前端朝后端提交数据的时候,会朝当前页面对应的借口提交数据。

    # 获取用户数据
    request.POST.get()  # 默认只会获取列表最后一个元素
    request.POST.getlist()  # 如果你想获取列表 用getlist()
    
  3. request.GET:获取用户提交的get请求数据

    # 获取用户数据
    request.GET.get()  # 默认只会获取列表最后一个元素
    request.GET.getlist()  # 如果你想获取列表 用getlist(	
    

四、Django连接数据库

有两部步操作

注意!

  1. 之后在写django项目的时候 一个django就对应一个数据库
  2. 不要出现多个项目使用同一个数据的情况!!

1. 设置Django默认连接MySQL数据库

在settings中声明连接的是mysql数据库,而不是默认的sqlite3数据库。

# sttings

# 将默认的数据库连接注释掉或者直接修改
# DATABASES = {
#     'default': {
#         'ENGINE': 'django.db.backends.sqlite3',
#         'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
#     }
# }

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'day50',
        'USER':'root',
        'PASSWORD':'123',
        'HOST':'127.0.0.1',
        'PORT':3306,
        'CHARSET':'utf8'
    }
}

2. 设置Django使用pymysql模块连接

告诉django不要用默认的mysqldb模块连接mysql,而是要用pymysql。

你可以在项目名下的__init__.py中书写,也可以在应用名下的__init__.py中书写声明。

import pymysql
pymysql.install_as_MySQLdb()
# 两句话就可以了

五、Django orm简介

1. orm介绍

orm:对象关系映射
类----------->表

对象--------->数据

对象点属性---->字段对应的值

2. orm的优缺点

优点:能够让不会数据库操作的人也能够简单方便去操作数据库。

缺点:封装程度太高,有时候会出现查询效率偏低的问题

  • 所以在工作中,简单的数据库用orm操作。
  • 复杂的,追求速度,就需要你手动书写sql语句来操作mysql。

3. Django操作orm

书写模型类
去应用下的models.py中书写模型类(就是类)

六、数据迁移(同步)

python3 manage.py makemigrations  # 将数据库的修改 记录到一个“即将执行的操作记录本”上(migrations文件内),待会会一起执行这个小本本里面的操作。
python3 manage.py migrate  # 将修改操作真正的同步到数据库中

通过这两条命令创建的表会自动在表名前加一个app名的前缀,用以区分不同的app表。

七、模型表相关操作

1. 模型表字段的查增改删

  1. 字段的修改

    直接修改代码 然后执行数据库迁移命令即可(两条一条不能少)

  • 方式1 设置默认值

    email = models.EmailField(default='123@qq.com') # varchar

  • 方式2 允许字段为空

    phone = models.BigIntegerField(null=True)

  • 方式3 直接在提示中给默认值

    gender = models.CharField(max_length=32)

  1. 字段的删除

    直接注释掉对应的字段 然后再执行数据库迁移命令即可(谨慎使用)

2. 模型表数据的查增改删

2.1 查

data = models.User.objects.filter(username=username)  # <QuerySet [<User: User object>]>
"""
filter返回的结果是一个"列表",里面才是真正数据对象
filer括号内可以放多个关键字参数 这多个关键字参数在查询的时候 是and关系
"""

user_list = models.User.objects.all()  # models.User.objects.filter()
"""
结果是一个"列表" 里面是一个个的数据对象
"""

2.2 增

user_obj = models.User.objects.create(username=username,password=password)
print(user_obj,user_obj.username,user_obj.password)
# create方法会有一个返回值  返回值就是当前被创建的对象本身

2.3 改

models.User.objects.filter(id=edit_id).update(username=username,password=password)
"""
批量操作  会将filter查询出来的列表中所有的对象全部更新
"""

2.4 删(一般情况下不用)

models.User.objects.filter(id=delete_id).delete()
"""
批量操作  会将filter查询出来的列表中所有的对象全部删除
"""