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')

 

 

 

 

 

 

 

 

posted on 2018-01-12 23:17  王大拿  阅读(2078)  评论(0编辑  收藏  举报

导航