• Django静态文件配置-request方法-ORM简介-字段的增删改查


    app的创建注意事项:

      在Django新创建的app要在seetings.py中添加注册,才会生效

     创建app:django-adminapp an startapp app名称 或者 python3 mansge.py startpp名称

     手动创建的app不会自带存放html的templates文件夹,需要手动创建

     Django静态文件配置

      对于前端已经写好了的文件,我们只是拿过来使用,那么这些文件都可以称之为"静态文件";

    静态文件可以是:boostrap一类的前端框架,已经写好了的图片、css、js。

    静态文件默认是存放在static文件下,项目中没有的话,需要手动创建。

    static文件夹中默认会默认创建的子文件夹

    css文件夹  当前网站所有的样式文件
    js文件  当前网站所有的js文件
    img文件  当前网站所有的图片文件
    其他(前端框架代码 第三方插件代码...)

    用户可以访问的资源默认都在url中,只有url中开设的资源才能访问到,需要手动指定是否需要暴露给用户

    静态文件的配置:

    Django默认是支持自动重启代码的,新修改的后端内容只需要多刷新网页几次即可;

      机制:实时监测文件代码变化 只要有变化,就会自动重启,可能你的代码还没有写完 这个时候就会自动报错

    静态文件接口前缀“动态解析”

    { % load static %} 利用解析器 动态获取接口前缀

    如果访问的ulr资源明明存在却报如下错误时,需要把seething.py中的

     可以通过method改为post请求
     改成post请求之后 需要去settings文件中注释掉一个中间件

    Request对象和Response对象

    Request对象

      当一个页面被请求时,Django就会创建一个包含本次请求原信息的HttpRequest对象。
    Django会将这个对象自动传递给响应的视图函数,一般视图函数约定俗成地使用 request 参数承接这个对象。

    请求相关的常用值

    path_info  返回用户访问url,不包括域名。

    method    请求使用的HTTO方法的字符串表示,全大写表示。

    GET    包含所有的HTTP GET参数的字典对象。

    POST   包含所有HTTP POST 参数的类字典对象。

    body  请求体,byte类型request.POST的数据就是从body内取到的。

    例如常用的方法:

    注意事项:

    request.method获取请求方法
            
    对数据的处理 不单单只有wsgiref模块  django后端也进行了大量的数据处理
    GET
        request.GET获取前端get提交的数据(就类似于是一个大字典)
        取值
        request.GET.get('username')  # 虽然value是一个列表 但是默认只取列表最后一个元素
        # 强烈不建议你使用中括号的形式取值
                    
        # 如果想直接把列表全部取出(******)
            request.GET.getlist('hobby')
    POST
        request.POST获取前端post提交的数据(就类似于是一个大字典)
        取值
        request.POST.get('username')  # 虽然value是一个列表 但是默认只取列表最后一个元素
        # 强烈不建议你使用中括号的形式取值
                    
        # 如果想直接把列表全部取出(******)
        request.POST.getlist('hobby')

    上传文件例子

    def upload(request):
        """
        保存上传文件前,数据需要存放在某个位置。默认当上传文件小于2.5M时,django会将上传文件的全部内容读进内存。从内存读取一次,写磁盘一次。
        但当上传文件很大时,django会把上传文件写到临时文件中,然后存放到系统临时文件夹中。
        :param request: 
        :return: 
        """
        if request.method == "POST":
            # 从请求的FILES中获取上传文件的文件名,file为页面上type=files类型input的name属性值
            filename = request.FILES["file"].name
            # 在项目目录下新建一个文件
            with open(filename, "wb") as f:
                # 从上传的文件对象中一点一点读
                for chunk in request.FILES["file"].chunks():
                    # 写入本地文件
                    f.write(chunk)
            return HttpResponse("上传OK")

    Response对象

      HttpResponse类位于django.http模块中;用于获取或者传递字符串的方法。

    传递字符串

    from django.http import HttpResponse
    response = HttpResponse("Here's the text of the Web page.")
    response = HttpResponse("Text only, please.", content_type="text/plain")

    属性:

    HttpResponse.content:响应内容

    HttpResponse.charset:响应内容的编码

    HttpResponse.status_code:响应的状态码

    Django连接数据库MySQL

    建立连接

    建立连接后也可以直接操作表的字段及属性相关操作

     

    修改默认连接数据库的配置

     修改完后需要在app.py文件下的__init__.py中修改添加以下两句话,才算是完全配置好

     Django中的ORM

    ORM对象关系映射
        表 >>                类
        一条条记录 >>        对象
        字段对应的值 >>    对象的属性

    直接在models,py中书写

     创建好模型表后需要执行数据的迁移命令,也可以快捷方式执行窗口(Tools)

    python3 manage.py makemigrations  # 仅仅是在小本本上(migrations文件夹)记录数据库的修改 并不会直接操作数据
    python3 manage.py migrate  # 将数据库修改记录 真正同步到数据库
       

    注意:只要动了models中跟数据库相关的代码 就必须重新执行上面的两条命令 缺一不可(***)

    字段的增删改查

    """增
    当一张表已经创建出来之后
    后续还想添加字段, 可以有两种方式
    1.给新增的字段设置默认值
        addr = models.CharField(max_length=32, default='China')  # default该字段默认值
    
    2.给新增的字段设置成可以为空
        age = models.IntegerField(null=True)  # 该字段允许为空        
    
    删(慎用)
    删除字段:直接在models.py中注释该字段;然后重新执行两条命令即可
    注意: 执行完之后
    表中该字段所对应的所有的数据全部删除
    并且一般情况下,基本是不会用到真正意义上的删除
    
    """

    必须设置字段的属性默认值:true、null等

     

     数据的增删改查

    # 1.查询数据
            # 1.1 get()
            # user_obj = models.User.objects.get(username=username)
            # """
            # get方法 能够直接拿到数据对象本身 但是 当查询条件不存在的时候 会直接报错  所有不推荐使用
            # """
            # print(user_obj)
            # print(user_obj.username)
            # print(user_obj.password)
    
            # 1.2 filter()  过滤筛选
            # res = models.User.objects.filter(username=username,password=password)
            """
            filter查询出来的结果是一个"列表 列表内放的才是一个个的数据对象本身"
            当查询条件不存在的时候 不会报错 只会返回一个空列表
            filter括号内 支持写多个参数  并且参数与参数之间是and的关系
    """ # print(res.query) # 只有querySet对象才可以直接点query查看年内部对应的sql语句 # 1.filter拿到的结果就是一个querySet对象(你现在只需要知道filter拿到的结果就能够点query查看sql语句) """ # SELECT `app01_user`.`id`, `app01_user`.`username`, `app01_user`.`password` # FROM `app01_user` # WHERE (`app01_user`.`username` = jason AND `app01_user`.`password` = 123) # """

    # print(res) # user_obj = res[0:2] """ querySet对象 你可以吧它当做列表操作 取值也可以通过索引取(querySet只支持正数索引 不支持负数),还支持切片操作(切出来的结果还是一个querySet对象) 但是不推荐你这么做 """ user_obj = models.User.objects.filter(username=username).first() # 拿列表中第一个数据对象 """ 不推荐你使用索引取值 原因在于一旦没有任何数据 再索引取值会报错 但是如果用first虽然内部也是按照索引取值 但是没有数据 也不会报错 返回的是None """ # print(user_obj,user_obj.username,user_obj.password)

    查:

    from app01 import models
            
    models.User.objects.all()  # 直接拿所有的数据
            
    models.User.objects.get(username=username)  
            
    res = models.User.objects.filter(username=username)
    res.query 
            
    user_obj = res.first()

    1、models.User.objects.create(Username=uername,password=password)
    
    2、user_obj = models.User(username=uername,passeord=password)
        user_obj.save()

    删除

    models.User.objects.firter(筛选的条件).delete()

    修改

    models.User.objects.filter(条件).update()
    

      

      

  • 相关阅读:
    leetcode刷题笔记 273题 整数转换英文表示
    leetcode刷题笔记 278题 第一个错误的版本
    leetcode刷题笔记 268题 丢失的数字
    leetcode刷题笔记 264题 丑数 II
    leetcode刷题笔记 263题 丑数
    20210130日报
    20210129日报
    20210128日报
    20210127日报
    20210126日报
  • 原文地址:https://www.cnblogs.com/Gaimo/p/11564810.html
Copyright © 2020-2023  润新知