zoukankan      html  css  js  c++  java
  • 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()
    

      

      

  • 相关阅读:
    Validation failed for one or more entities. See 'EntityValidationErrors' property for more details
    Visual Studio断点调试, 无法监视变量, 提示无法计算表达式
    ASP.NET MVC中MaxLength特性设置无效
    项目从.NET 4.5迁移到.NET 4.0遇到的问题
    发布网站时应该把debug设置false
    什么时候用var关键字
    扩展方法略好于帮助方法
    在基类构造器中调用虚方法需谨慎
    ASP.NET MVC中商品模块小样
    ASP.NET MVC中实现属性和属性值的组合,即笛卡尔乘积02, 在界面实现
  • 原文地址:https://www.cnblogs.com/Gaimo/p/11564810.html
Copyright © 2011-2022 走看看