zoukankan      html  css  js  c++  java
  • Djangon 基础总结 汇总 从请求到返回页面的过程,

     第一步我是用户 现在 浏览器上输入地址 ---》 发送给服务   来请求返回当前的页面

     

     第二步  服务端获得我当前的客户端要求访问的地址  

     第三步 服务端去urls.py中去,来看是要访问那个地址   看到是 classlist  它对应的函数名是classlist

    第四步  根据地址对应的 函数去执行函数classlist

     

     #函数执行功能,最后的一句话是将 HTML文件返回给客户端 浏览器  ,并将信息 返回给客户端 

    # 浏览器接受返回过来的信息,按照HTML 规则渲染页面

    关于render 语句用于将信息返回给页面并渲染的功能

    获取网页内容执行的函数

    def  classlist(request):
        conn=pymysql.connect(host='localhost',database='db1',user='root',
                             password='123456',charset='utf8')
        #这个是将下边的获取的ret的类型转换成字典类型
        #   因为他从数据库中获得的数据是((5, '全栈9期'), (6, '全栈10期'))这种元祖类型的,不利于取值
        #[{'id': 5, 'cname': '全栈9期'}, {'id': 6, 'cname': '全栈10期'}] 写上这句的话就转换成字典类型
        #有利于后台去获取值并将数据显示出来
        cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)
    
        sql='select id,cname from class order by id '
        #把数据库中的表单的数据全部获取出来
        cursor.execute(sql)
        #将获取的数据放到这个变量中  此时已经是字典形式的了
        ret=cursor.fetchall()
        print(ret)
        #将网页,字典以键值对的形式返回给html文件
        return render(request,'class_list.html',{'class_list':ret})  #那边写的是class_list 就能够得到它对应的值   ret 这个字典

     HTML代码中的对应写法

      
     {% for class in calss_list %}  #开头    Django 支持这种循环,只要写一个这种代码就可以  以循环的形式将内容添加到网页中去
                      <tr>
                      <th scope="row">{{ class.id }}</th>
                      <td>{{ class.cname }}</td>   #取值 .cname对应的数据库中的字段名{'id': 6, 'cname': '全栈10期'}
                      <td class="text-center">
                        <button type="button" class="btn btn-sm btn-success" aria-label="Left Align">
                          <span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>编辑
                        </button>
                        <button type="button" class="btn btn-sm btn-danger" aria-label="Left Align">
                          <a href="/delete/?id={{ class.id }}">删除</a>
                        </button>
                      </td>
                    </tr>
    
     {% endfor %}   #  结尾

    添加功能和对应的HTML中的表单写法                     用到了form表单

     第一步先点击   添加1  按钮

    添加一中绑定这  a标签 跳转标签

          <button type="button" class="btn btn-success pull-right" ><a href="/update/">添加1</a>   #herf="/update/"  当是地址一致,只是末尾不一样的时候就跳  
           </button>                                             跳到末尾的这个地址

    此时  又向服务端发送请求  http://127.0.0.1:8001/update/   它的尾端是  /update/

    此时在判断后执行  upate函数 

    # 添加功能
    def update(request):
        #开始过来的的时候请求的信息是GET 所以不会执行这一个if 条件下的内容,而是去执行下边的内容
        if request.method=='POST':
            rename=request.POST.get('name')
            print(rename)
            conn = pymysql.connect(host='localhost', user='root', password='123456', database='db1', charset='utf8')
            cursor = conn.cursor()
            sql = 'insert into class(cname)VALUES (%s);'
            ret = cursor.execute(sql,rename )
            print(ret)
            conn.commit()
            cursor.close()
            conn.close()
            return redirect('/classlist/')
        #因为服务端得到的是GET请求,所以他就不执行if语句,
        # 执行这一句 将网页返回给请求端
        return render(request,'tianjia.html')

    得到页面

    将数据写完执行  提交按钮              

    这时候要看form表单中的对应代码了

    <body>
     # action="/update/"  的意思是将数据提交到 /update/这个网页
       #  method="post"  意思是方法是post  在后边的函数中取
     #request.method  在后端的时候就能取到  POST  这个方法 执行if与句中的内容
    <form action="/update/" method="post">
    <span>姓名</span>
    <input type="text" name="name">
    <input type="submit">
    </body>

     这是后看这个代码  这时候if 中的条件成立

    def update(request):
        #开始过来的的时候请求的信息是GET 所以不会执行这一个if 条件下的内容,而是去执行下边的内容  注意  点击提交的时候这if 条件成立  执行这个语句 将数据添加到数据库中
        if request.method=='POST':
            rename=request.POST.get('name')  #取到添加的数据  即  name 对应的  value 值
            print(rename)
            conn = pymysql.connect(host='localhost', user='root', password='123456', database='db1', charset='utf8')
            cursor = conn.cursor()
            sql = 'insert into class(cname)VALUES (%s);'
            ret = cursor.execute(sql,rename )   添加到数据库中去
            print(ret)
            conn.commit()
            cursor.close()
            conn.close()
            return redirect('/classlist/')  添加完  提交后 跳转到  /classlist/  对应的网页
        #因为服务端得到的是GET请求,所以他就不执行if语句 ,
        # 执行这一句  将网页返回给请求端
        return render(request,'tianjia.html')

  • 相关阅读:
    Java入门——day42
    第六周进度报告
    Java入门——day41
    Java入门——day40
    Java入门——day39
    Java入门——day38
    Java入门——day37
    Java入门——day36
    Java入门——day35
    第五周进度报告
  • 原文地址:https://www.cnblogs.com/wangkun122/p/8278045.html
Copyright © 2011-2022 走看看