前面写了关于HTML和Django结合的文章,通过视图与HTML结合,然后加上urls渲染返回给用户浏览器。很明显我们都能看到这些仅仅是静态HTML,那如何通过Django创建动态的HTML呢?

动态的页面

我们先通过一个例子来简单了解下。

1、首先通过在views.py文件中添加一些动态的数据

  1. # Views.py
  2.  
  3. from django.http import HttpResponse
  4. import datetime
  5.  
  6. # 创建动态数据
  7. def time(request):
  8. now = datetime.datetime.now()
  9. html = '现在的时间为%s'%now
  10. return HttpResponse(html)

2、通过urls.py文件渲染给浏览器

  1. # urls.py
  2.  
  3. from django.contrib import admin
  4. from django.urls import path
  5. from Anjing import views
  6.  
  7. urlpatterns = [
  8. path('admin/', admin.site.urls),
  9. path('time/', views.time), # 添加对应的路径
  10. ]

3、启动Django服务

可以看到显示的是当前数据,重新刷新,数据就会变化。

通过上面例子,已经创建好了一个小小的动态页面,当然这次要说的不仅仅是这样,是需要用户的数据交互,通过用户输入的内容,并返回给用户

接收并返回数据

当我们登录博客的时候,博客都会返回给我们一个用户名,而这个用户名是自己设置的,这里安静写一个简单的登录网站,网站直接返回登录的名称

1、编写登录页面HTML,添加路径渲染,添加视图返回

在templates目录下创建一个login.html(这个页面为登录页面)

  1. # login.html
  2.  
  3. <!DOCTYPE html>
  4. <html lang="en">
  5. <head>
  6. <meta charset="UTF-8">
  7. <title>登录</title>
  8. </head>
  9. <body>
  10. <h1>
  11. <p style="text-align:center" font size="2">欢迎来到安静的博客:</p>
  12.  
  13. </h1>
  14. <h1>
  15. <p style="text-align:center">请输出账号密码:</p>
  16. </h1>
  17. <form action="/index/" method="post"><p style="text-align:center">用户:<input type="text" name="username" /><br />
  18. </p>
  19. <p style="text-align:center">密码:<input type="password" name="password" /><br />
  20. <input type="submit" value="提交" />
  21. </form>
  22.  
  23. </body>
  24. </html>

在templates目录下创建一个index.html文件(登录后跳转的页面)

  1. <html>
  2. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  3. <head>
  4. <title>安静博客乐园</title>
  5. </head>
  6. <body>
  7. <center>
  8. <li>欢迎您:
  9. </li>
  10. </center>
  11. </ul>
  12. </body>
  13. </html>

在urls.py文件中添加对应的路径,然后启动服务,在浏览器中输入对应的路径查看

  1. # urls.py
  2.  
  3. from django.contrib import admin
  4. from django.urls import path
  5. from Anjing import views
  6. urlpatterns = [
  7. path('admin/', admin.site.urls),
  8. path('login/', views.login),
  9. path('index/', views.index),
  10. ]

在views.py文件中添加视图返回内容

  1. # views。py
  2.  
  3. from django.shortcuts import render
  4.  
  5. def index(request):
  6. if request.method == 'POST':
  7. username = request.POST.get('username')
  8. password = request.POST.get('password')
  9. return render(request, 'index.html')

全部工作都准备完成了,然后启动服务,打开浏览器,查看我们的页面渲染

我们在输入框内随便输入用户信息点击提交

发现出现了403,什么情况,我们上面已经对页面进行了渲染,应该不会出错哈。

大家不要着急,其实这个是正常的,这个属于Djaongo有一个跨站请求保护的机制,我们可以从报错中发现需要我们加入 {% csrf_token %}

  1. # login.html
  2.  
  3. <!DOCTYPE html>
  4. <html lang="en">
  5. <head>
  6. <meta charset="UTF-8">
  7. <title>首页</title>
  8. </head>
  9. <body>
  10. <h1>
  11. <p style="text-align:center" font size="2">欢迎来到安静的博客:</p>
  12. </h1>
  13. <h1>
  14. <p style="text-align:center">请输出账号密码:</p>
  15. </h1>
  16. <form action="/index/" method="post">
  17. {% csrf_token %}
  18. <p style="text-align:center">用户:<input type="text" name="username" /><br />
  19. </p>
  20. <p style="text-align:center">密码:<input type="password" name="password" /><br />
  21. <input type="submit" value="提交" />
  22. </form>
  23. </body>
  24. </html>

当然了我们也要在返回的页面加入一些参数和修视图中的代码

  1. # index.html
  2. <html>
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  4. <head>
  5. <title>安静博客乐园</title>
  6. </head>
  7. <body>
  8. <center>
  9. <li>欢迎您,
  10. <tbody>
  11. <tr>
  12. <td>{{data}}</td>
  13. </tr>
  14. </tbody>
  15. </li>
  16. </center>
  17. </ul>
  18. </body>
  19. </html>

修改views.py视图文件

  1. # views.py
  2.  
  3. from django.shortcuts import render
  4. from django.http import HttpResponse
  5.  
  6. def index(request):
  7. if request.method == 'POST':
  8. username = request.POST.get('username')
  9. password = request.POST.get('password')
  10. return render(request, 'index.html', {'data':username})

这个时候我们在此启动Django服务,然后输入对应数据点击提交按钮,发现数据已经全部接收了。

我们通过了登录的小案例,大致的了解到了数据交互和数据接收应该如何进行,主要的一个知识,我理解到Django的一个跨站请求保护机制。多次使用,就能孰能生巧了

如果感觉安静写的对您有帮助,请点个关注,如果哪里有不懂的或者不明白的,可以下方留言,看到后第一时间回复

Django---Django返回用户输入数据的更多相关文章

  1. Django 中的用户认证

    Django 自带一个用户认证系统,这个系统处理用户帐户.组.权限和基于 cookie 的 会话.本文说明这个系统是如何工作的. 概览 认证系统由以下部分组成: 用户 权限:控制用户进否可以执行某项任 ...

  2. django 从零开始 8 用户登录验证 待测

    看文档 djang 自带一个用户登录验证的方法,不过有些看着懵逼,去网上找了一圈,发现很多都是照抄文档说明的,几乎没说啥原理 特别是 from django.contrib.auth import a ...

  3. django rest framework用户认证

    django rest framework用户认证 进入rest framework的Apiview @classmethod def as_view(cls, **initkwargs): &quo ...

  4. django中添加用户

    在django中添加用户,直接在auth_user表中添加会有问题,因为这里密码是加密的,可以通过manage.py shell加入 创建User: 1 >>> from djang ...

  5. Django实现单用户登录

    最近由于要毕业了写论文做毕设,然后还在实习发现已经好久都没有写博客了.今天由于工作需求,需要用Django实现单用户登录.大概意思就是跟QQ一样的效果,每个账号只能一个地方登录使用,限制账号的登录次数 ...

  6. django rest_framework 实现用户登录认证

    django rest_framework 实现用户登录认证 1.安装 pip install djangorestframework 2.创建项目及应用 创建过程略 目录结构如图 3.设置setti ...

  7. django JsonResponse返回中文时显示unicode编码(\u67e5\u8be2)

    django JsonResponse返回中文时显示unicode编码(\u67e5\u8be2) 关注公众号"轻松学编程"了解更多. 原因 这个unicode编码,是python ...

  8. django项目同一用户不能同时登陆

    1.session认证 ..... login(request, user) #登录成功 # 登录之后获取获取最新的session_key session_key = request.session. ...

  9. [django]django xlrd处理xls中日期转换问题

    xlrd会把xls文件中比如20160--03-01类型的时间转换成整数,那么我们如何保证xlrd读取进来的时间为2016-03-01格式呢? 使用xlrd中的xldate_as_tuple函数 代码 ...

随机推荐

  1. css 浏览兼容问题及解决办法 (1)

    主流浏览器css兼容问题的总结 最近又搞了一波网站的兼容,由于要求ie浏览器还是要兼容到ie8,所以调起来还是各种蛋疼. 现在就post一些做兼容的总结,可能不够全面,但是可以告诉大家如何避过一些坑. ...

  2. num08---原型模式

    关键点,实现 Cloneable  接口, 重写clone() 方法.克隆出的对象属性保持一致. 案例: 原型模式在spring 源码中的应用: =========================== ...

  3. 【OpenGL】GL_DEPTH_TEST深度测试问题

    记录一个深度测试的问题 在实现一个简单的OpenGL程序时,遇到了一个问题,深度测试总是有问题,无法正常显示,如下 正常情况为 通过调试发现屏幕空间中的所有深度值均为1. OpenGL代码如下: vo ...

  4. NR / 5G - MAC Scheduler

  5. LeetCode29 Medium 不用除号实现快速除法

    本文始发于个人公众号:TechFlow,原创不易,求个关注 链接 Divide Two Integers 难度 Medium 描述 给定两个整数,被除数和除数,要求在不使用除号的情况下计算出两数的商 ...

  6. 调用winpcap发送路由器公告

    #include <stdlib.h> #include <stdio.h> #include <pcap.h> #pragma comment(lib, &quo ...

  7. 小程序在wxml页面格式化类似的2019-02-16T10:54:47.831000时间

    其实新建小程序的时候,会有一个util.js文件,这个文件里已经有时间格式化的方法了,可是它却不能再wxml页面调用, 不过wxml页面是支持引入.wxs文件的,我们重新写一个这样子的工具文件就解决了 ...

  8. Blazui 常见问题:我更新了数据,为什么界面没刷新?

    首发于:http://www.blazor.group:8000/topic/reply?tpid=9 开门见山,不介绍,不废话 建议食用本文前先食用 https://www.cnblogs.com/ ...

  9. 关于mac下redis的安装和部署

    近来学习scrap分布式,需要用到redis,但以前没接触过,所以记录一下自己的安装过程. 准备:Mac,redis-5.0.4.tar.gz 1.压缩包到官网下(建议下载稳定版)网址:redis.i ...

  10. Linux部署MongoDB

    下载安装包 打开网站 https://www.mongodb.com/download-center/community查找与Linux版本一致的MongoDB安装包.我这里选择安装包格式为tgz压缩 ...