[学习笔记]Python web开发利器-Django再遇

Django本身是遵循了MVC架构的一个Web开发框架,这个我们可以稍后再详细了解。
还是从实际例子来继续学习吧。


改用模板的来做视图

  • 在上次我们所创建的项目中的sign目录下创立一个templates目录
  • 新建一个index.html在此目录下,index.html的内容可如下:
[学习笔记]Python web开发利器-Django再遇_第1张图片
1.jpg
  • 再次刷新URL:http://localhost:8000/index/
[学习笔记]Python web开发利器-Django再遇_第2张图片
2.jpg

更新视图为登录界面

  • 修改index.html的内容为:
[学习笔记]Python web开发利器-Django再遇_第3张图片
4.jpg
  • 再次刷新URL:http://localhost:8000/index/
[学习笔记]Python web开发利器-Django再遇_第4张图片
5.jpg

到了这一步,我们其实只是实现了界面展示的初步功能,要想真正实现登录还需要思考以一些问题:

  • 当用户输入用户名密码并点击“登录”按钮之后,表单(form)中的数据要以什么方式(GET/POST)提交系统?
  • 系统如何验证得到的用户名密码?
  • 如果验证成功应该跳转到什么页面?
  • 如果验证失败如何将错误提示
    返加给用户?

构建GET/POST请求
当客户机通过HTTP 协议向服务器提交请求时,最常用到的方法是GET 和POST。
GET - 从指定的资源请求数据。
POST - 向指定的资源提交要被处理的数据

  • 修改GET请求在index.html中
    ···
    ...








    ...
    ···
    刷新URL后并输入用户名和密码后可以看到URL上的值变为:http://localhost:8000/index/?username=admin&password=admin123
    (注:GET 方法会将用户提交的数据添加到URL 地址中,路径后面跟问号“?”,username 和password 为HTML 代码中标签的name 属性值,username=admin 表示用户名输入框得到的输入数据为“admin”。password=admin123 密码输入框得到的输入数据为“admin123”。多个参数之间用“&”符号隔开。)

  • 修改POST请求在index.html中
    ···
    ...








    {% csrf_token %}
    ...
    ···
    做了两处修改,一是将GET修改为POST,另外是添加了一个csrf_token,这个是Django针对csrf攻击做的安全性补救,在每一个form请求的时候都需要带上一个token,以此来判定所有的请求都来自同一个网站。


处理登录后操作
试想一下如果我们在登录的时候会遇到的两种情况:

  • 如果验证成功,即是用户名和密码输入正确时(先默认设置用户名为admin,密码为123456),显示“login sucess!”
  • 如果验证失败,即是用户名和密码输入错误时(先默认设置用户名为admin,密码为123456),显示“username or password error!”
  1. POST请求后的数据应将在action中处理
    通过form 表单的action 属性来指定提交的路径
    index.html

march/urls.py中添加login_action的路由

urlpatterns = [
……
url(r'^login_action/$', views.login_action),
]

修改sign/views.py 文件,创建login_action 视图函数

# 登录动作
def login_action(request):
if request.method == 'POST':
  username = request.POST.get('username', '')
  password = request.POST.get('password', '')
if username == 'admin' and password == '123456':
  return HttpResponse('login success!')
else:
  return render(request,'index.html', {'error': 'username or password
error!'})

但是,在index.html 页面上并没有显示错误提示的地方,所以,需要在index.html 页面中添加Django模板语言{{error}},它对应render 反回字典中的key,并且在登录失败的页面中显示value,即“username or password error!”信息.

……

  

{{ error }}
{% csrf_token %} ……

修改完后尝试一下登录成功和失败的页面。

2.jpg
[学习笔记]Python web开发利器-Django再遇_第5张图片
1.jpg

Login Success只是一种替代方案,让我们来试试更多的功能,比如登录成功后是活动的列表。

TO be continue

你可能感兴趣的:([学习笔记]Python web开发利器-Django再遇)