day 52

静态文件配置

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

  2. 什么是静态文件

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

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

    通常情况下,在static文件夹内部还会再建其他的文件夹

    css    文件夹
    js     文件夹
    font   文件夹
    img    文件夹
    Bootstrap
    fontawesome

    为了更加方便的管理文件,django中需要你自己手动创建静态文件夹存放的文件夹

    在settings中STATIC_URL = '/static/' '/static/'动静态文件资源接口的前缀,通常情况下接口的前缀的名字也叫static。也可以手动设置静态文件的访问资源

    STATIC_URL = '/static/'  #访问静态文件资源接口前缀  通常情况下接口前缀的名字也叫static,手动配置静态文件的访问资源
        STATICFILES_DIRS = [  # 静态资源所在的文件夹路径
                os.path.join(BASE_DIR,'static'),  # 将static文件里面所有的资源暴露给用户
                os.path.join(BASE_DIR,'static1'),  # 将static文件里面所有的资源暴露给用户,行末的逗号不能漏掉
            ]
    这样可以在templates中导入static目录下的静态文件了        
    例如:<script src="/static/jquery-1.12.4.js"></script>     
  4. 静态文件动态绑定

{% load static %}
<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>

form表单默认是get请求

get请求能够携带参数

http://127.0.0.1:8000/login/?username=jason&password=jason123

问号后面的就是携带的参数

特点:url?xxx=xxx&yyy=yyy

  1. 携带的数据是不安全的

  2. 携带的数据通常是一些不重要的

  3. 携带的数据大小有限制的

    get请求,http规范对URL长度是没有限制的,只是不同的浏览器做了限制。比如:在IE:2083字节,其他浏览器支持的字节,都比IE高

    简单点,我们可以理解为:get请求,URL长度不要超过,2kb就好

​ post请求,也没有长度的限制,限制它的是服务器的处理能力,与存储大小。还有就是web容器的限制,比如tomcat默认的是2mb

action

  1. 不写,默认是朝当前的地址提交数据的
  2. 只写后缀,如:/index
  3. 写全路径https://www.baidu.com

前期我们在朝后端发送提交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',
        ]

django后端的视图函数 默认处理的是get请求

无论是发送get请求还是post请求 都会执行视图函数

def login(request):
            print('来啦 老弟~')
            return render(request,'login.html')

get请求指向拿到的login页面

post请求想提交数据 然后后端做校验

如何判断当前请求方式

request.method 拿到的是字符串大写的请求的方式 GET POST

def login(request):
                # if request.method == 'GET':
                #     print('来啦 老弟~')
                #     print(request.method,type(request.method))  # 获取前端请求方式
                #     return render(request,'login.html')
                # elif request.method == 'POST':
                #     print('post业务逻辑')
                #     return HttpResponse('收到了')
                if request.method == "POST":
                    return HttpResponse('收到了')
                return render(request,'login.html')

request方法的初识

request.method   获取请求的方式   大写字符串

request.POST   获取用户提交的post请求数据
如何获取用户数据
request.POST.get()   默认的指挥获取列表最后一个元素
request.POST.getlist()   如果你想获取列表  用getlist()


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

pycharm 连接数据库

django连接MySQL

必须要有两步操作

  1. 配置文件配置

    DATABASES = {
                        'default': {
                            'ENGINE': 'django.db.backends.mysql',  # 指定数据库类型
                            'NAME': 'day49',  # 指定库的名字
                            'USER':'root',  # 注意 键必须是全大写
                            'PASSWORD':'123qwe',
                            'HOST':'127.0.0.1',
                            'PORT':3306,
                            'CHARSET':'utf8'
                        }
                    }
  2. 主动告诉django不要用默认的MySQLdb 连接 而是用pymysql

你可以在项目名下的__init__.py文件中书写

也可以在应用名下的__init__.py文件中书写

import pymysql

pymysql.install_as_mysqldb()

为什么用orm

能够让不会使用数据库操作的人也能够简单的去操作数据库

orm的缺点

封装的程度太高 有时候出现查询的效率会降低

所以在简单地工作中

复杂的 追求速度 还是需要自己写sql语句

django中如何操作orm

书写模型类

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

之后在写django项目的时候,一个django就对应一个数据库

数据库的迁移命令

python3 manage.py makemigrations 将数据库修改 记录到(migrations文件内)

python3 manage.py migrate 将修改操作的真正的数据同步到数据库中

这两条语句必须都要执行

只要修改了models中的数据跟数据库中的代码相关的数据,你就必须重新执行上面的代码

模型表字段的增删该查

字段的修改

直接修改代码 然后执行数据库迁移命令即可(两条命令必须都要执行)

 # 方式1  设置默认值
 email = models.EmailField(default='[email protected]')  # varchar
 # 方式2   允许字段为空
 phone = models.BigIntegerField(null=True)
 # 直接在提示中给默认值
 gender = models.CharField(max_length=32)
 # 方式3  在提示框中,提示什么信息,根据提示的信息,直接在命令框中添加条件
 
 字段的删除
 直接注释掉对应需要的字段就行了   然后再执行数据库迁移命令即可(谨慎使用)

模型表数据的增删改查

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

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

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

删(谨慎使用)

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

猜你喜欢

转载自www.cnblogs.com/gfhh/p/11913586.html
今日推荐