Django学习笔记--4

Django--Day04

  • 一、 视图系统
    • 1.1 FBV与CBV
  • 二、文件上传
    • 1.在HTML文件中添加文件提交的标签
    • 2.获取将要上传的文件名,
    • 3.写入文件并保存在项目中
  • 三、请求对象与响应对象
    • 3.1 请求对象
      • (1).请求相关的常用值
      • (2).请求常用属性
    • 3.2 响应对象
  • 四、ORM系统
    • 4.1 Django数据库的配置
    • 4.2 增加用户
      • (1)在models.py文件中,创建模型类,生成对应的数据库表格
      • (2)接下来要生成迁移文件与生成表
      • (3)查看生成的数据库表格
      • (4)在后台获取用户信息保存时有两种方法:
    • 4.3 查看用户
    • 4.4 修改用户
    • 4.5 删除用户

一、 视图系统

视图系统是一个视图函数类,简称视图,是一个简单的python函数(类),它可以接受web请求并且返回web响应。这个相应可以是一个网页,一个重定向,一个404错误或者是一个简单的字符串。在Django中,有请求就必须要有响应。因此,无论视图系统本身包含什么逻辑,都要返回响应。大家约定俗成地将视图放置在项目(project)或程序(app)目录下的名为views.py的文件中。

1.1 FBV与CBV

在视图系统可以分为FBV(function base view)与CBV(class base view),即基于函数的view与基于类的view。
注意:在创建基于类的view时,需要继承View类以及重写get和post方法,并且在路由设置时,要特别注意:

模块名.类名.as_view()

Django学习笔记--4_第1张图片
Django学习笔记--4_第2张图片

二、文件上传

比如在用户注册账号时,需要上传图片,或者用户根据自己的需要上传自己的文件,此时就需要用到文件上传文件的功能,包括并且不仅限于图片,视频等。

1.在HTML文件中添加文件提交的标签

Django学习笔记--4_第3张图片

2.获取将要上传的文件名,

file = request.FILES.get(‘upload_name’)
file_name = file.name 

3.写入文件并保存在项目中

    with open(file_name,’wb’) as f:
    	for i in file.chunks()
    		f.write(i)

chunks()为遍历出来的文件中的内容。底层封装好的方法
Django学习笔记--4_第4张图片

三、请求对象与响应对象

3.1 请求对象

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

(1).请求相关的常用值

•path_info : 返回用户访问url,不包括域名
•method : 请求中使用的HTTP方法的字符串表示,全大写表示。
•GET : 包含所有HTTP GET参数的类字典对象
•POST :包含所有HTTP POST参数的类字典对象
•body :请求体,byte类型 request.POST的数据就是从body里面提取到的

(2).请求常用属性

1.HttpRequest.scheme
表示请求方案的字符串(通常为http或https)

2.HttpRequest.path
一个字符串,表示请求的路径组件(不含域名)。
例如:"/music/bands/the_beatles/"

3.HttpRequest.method
一个字符串,表示请求使用的HTTP 方法。必须使用大写。例如:“GET”、“POST”

4.HttpRequest.encoding
  一个字符串,表示提交的数据的编码方式(如果为 None 则表示使用 DEFAULT_CHARSET 的设置,默认为 ‘utf-8’)。
  
5.HttpRequest.GET
一个类似于字典的对象,包含 HTTP GET 的所有参数。详情请参考 QueryDict 对象。

6.HttpRequest.POST
一个类似于字典的对象,如果请求中包含表单数据,则将这些数据封装成 QueryDict 对象。
  POST 请求可以带有空的 POST 字典 —— 如果通过 HTTP POST 方法发送一个表单,但是表单中没有任何的数据,QueryDict 对象依然会被创建。
  
7.HttpRequest.COOKIES
一个标准的Python 字典,包含所有的cookie。键和值都为字符串。

8.HttpRequest.META
一个标准的Python 字典,包含所有的HTTP 首部。具体的头部信息取决于客户端和服务器,下面是一些示例:
CONTENT_LENGTH —— 请求的正文的长度(是一个字符串)。
CONTENT_TYPE —— 请求的正文的MIME 类型。
HTTP_ACCEPT —— 响应可接收的Content-Type。
HTTP_ACCEPT_ENCODING —— 响应可接收的编码。
HTTP_ACCEPT_LANGUAGE —— 响应可接收的语言。
HTTP_HOST —— 客服端发送的HTTP Host 头部。
HTTP_REFERER —— Referring 页面。
HTTP_USER_AGENT —— 客户端的user-agent 字符串。
QUERY_STRING —— 单个字符串形式的查询字符串(未解析过的形式)。
REMOTE_ADDR —— 客户端的IP 地址。
REMOTE_HOST —— 客户端的主机名。
REMOTE_USER —— 服务器认证后的用户。
REQUEST_METHOD —— 一个字符串,例如"GET" 或"POST"。
SERVER_NAME —— 服务器的主机名。
SERVER_PORT —— 服务器的端口(是一个字符串)。

9.HttpRequest.FILES
一个类似于字典的对象,包含所有的上传文件信息。
FILES 中的每个键为 中的name,值则为对应的数据。
注意,FILES 只有在请求的方法为POST 且提交的 带有enctype=“multipart/form-data” 的情况下才会包含数据。否则,FILES 将为一个空的类似于字典的对象。

10、HttpRequest.get_full_path() 方法返回 path,如果可以将加上查询字符串。
  例如:"/music/bands/the_beatles/?print=true"

3.2 响应对象

  1. HttpResponse --> 返回字符串内容
  2. render --> 返回一个html页面
  3. redirect --> 返回一个重定向(告诉浏览器再去访问另外的网址)
    在这里插入图片描述
  4. JsonResponse json -->{‘字符串’,value}。
    JsonResponse是HttpResponse的子类,专门用来生成JSON编码的响应。
    Django学习笔记--4_第5张图片
    在这里插入图片描述

四、ORM系统

在python中,可以定义一个简单数据库,达到存储数据的目的。但是功能有限,只能作为测试代码功能的简单用图。
ORM:O–>OBJECT,R–>RELATION,M–>MAPPING
即使用面向对象的思想来建立与操作数据库
在python中的类可以看成对应数据库中的一张表
在python中的对象可以看成对应表中的一条记录
在python中的类属性则对应相应表格中的字段
他们之间的关系可以表示成下面的图片
Django学习笔记--4_第6张图片

4.1 Django数据库的配置

Django中的数据库配置已经被设置好了,但是如果要连接如mysql,sqlserver,oracle等主流数据库时,就需要手动在项目中的setting文件中配置路径,账号密码,端口等信息。
Django学习笔记--4_第7张图片
以配置mysql数据库为例:
Django学习笔记--4_第8张图片
运行测试,并未报错
Django学习笔记--4_第9张图片

注意: django==2.1.2 需要使用mysql 5.5 以上的版本。

为方便,在这里仍使用sqlit3数据库
Django学习笔记--4_第10张图片
Django学习笔记--4_第11张图片
Django学习笔记--4_第12张图片

4.2 增加用户

(1)在models.py文件中,创建模型类,生成对应的数据库表格

Django学习笔记--4_第13张图片

 class Person(models.Model):
     id = models.AutoField(primary_key=True)
     name = models.CharField(max_length=32)
     age = models.IntegerField()
     height = models.DecimalField(max_digits=5, decimal_places=2)
     weight = models.FloatField()
 birthday = models.DateField()

提示:一定要继承 models.Model 类。
Django学习笔记--4_第14张图片

(2)接下来要生成迁移文件与生成表

使用命令:

    python  manage.py  makemigrations
    python  manage.py  migrate

Django学习笔记--4_第15张图片

(3)查看生成的数据库表格

Django学习笔记--4_第16张图片

(4)在后台获取用户信息保存时有两种方法:

第一种:类名.objects.create(属性名称=xxx,属性名称=yyy)
第二种为类实例化的方法:
对象名=类()
对象名.属性名称=xxx
对象名.save()

 def add_user(request):
     if request.method == 'POST':
         name = request.POST.get('username')
         age = request.POST.get('age')
         height = request.POST.get('height')
         weight = request.POST.get('weight')
         birthday = request.POST.get('birthday')
         models.Person.objects.create(
             name=name,
             age=age,
             height=height,
             weight=weight,
             birthday=birthday,
         )
         # obj = models.Person()
         # obj.name = name
         # obj.age = age
         # obj.weight = weight
         # obj.height = height
         # obj.save()
         return HttpResponse('注册成功')
     return render(request,'app_2/add_user.html')

Django学习笔记--4_第17张图片
Django学习笔记--4_第18张图片
Django学习笔记--4_第19张图片

4.3 查看用户

语法:
类名.objects.all()
注:all()方法可以获取所有的记录

在HTML中的代码块:

    <table>
        <tr>
           <th>序号th>
            <th>姓名th>
            <th>年龄th>
            <th>身高th>
            <th>体重th>
            <th>生日th>
            <th>操作th>
        tr>
        {% for user in user_list %}
            <tr>
                <td>{{ forloop.counter }}td>
                <td>{{ user.name }}td>
                <td>{{ user.age }}td>
                <td>{{ user.height }}td>
                <td>{{ user.weight }}td>
                <td>{{ user.birthday |date:'y-m-d'}}td>
                <td>
                    <a href="#">修改a>
                    <a href="#">删除a>
                td>
            tr>
        {% endfor %}
    table>

Django学习笔记--4_第20张图片
Django学习笔记--4_第21张图片

4.4 修改用户

同样有两种方式:
第一种:类名.objects.filter(‘xxx’).update(‘xxxx’)
第二种:类实例化
对象名 = 类名.objects.get(‘xxx’)
对象名.属性名 = 新值
对象名.save()

第一种方法实例:

    def update_user(request):
        if request.method == 'POST':
            id = request.POST.get('id')
            name = request.POST.get('username')
            age = request.POST.get('age')
            height = request.POST.get('height')
            weight = request.POST.get('weight')
            birthday = request.POST.get('birthday')
            models.Person.objects.filter(id=id).update(name=name,age=age,height=height,weight=weight,birthday=birthday)
            return redirect('/app_2/show_user/')
        else:
            id = request.GET.get('id')
            user_info = models.Person.objects.get(id=id)
            return render(request,'app_2/update_user.html',{'user_info':user_info})

Django学习笔记--4_第22张图片
Django学习笔记--4_第23张图片

4.5 删除用户

两种语法:
第一种:类名.objects.get(xxx).delete()
第二种:类名.objects.filter(xxx).delete()
Django学习笔记--4_第24张图片

 def del_user(request):
     id = request.GET.get('id')
     # models.Person.objects.filter(id=id).delete()
     #或者
     models.Person.objects.get(id=id).delete()
 return redirect('/app_2/show_user/')

Django学习笔记--4_第25张图片

你可能感兴趣的:(学习笔记)