一. 基于类来定义view.py
diango中使用基于类来定义views的功能,其实更加方便,因为这样可继承一些定义好的基类,来减少我们的代码量
 
1. 使用基于类的方法,来重新定义user/views.py中的my_login函数功能
 
1.1首先引入基类中的View类,from django.views.generic.base import View,这个类中包含用户请求的get, post等方法
我们只需重新定义它get, post方法即可
 
 
1.2. 修改users/urls.py
 
 
 
2. 后台登陆表单的验证功能
2.1首先新建一个python文件 users/forms.py
 
2.2,在users/views.py中使用此验证功能
首先引入LoginForm,然后创建一个它的实例对象:login_form
调用对象的is_valid()函数来对表单进行验证,验证标准就是我们在users/form.py定义的
添加判断语句,使验证合法但用户名或密码真是错误的时候才显示用户名或密码错误;验证不成功时,将login_form返回前端
 
2.3  将验证错误信息显示在前端页面中
在if login_form.is_valid()这行代码打上断点,然后进行debug运行mxonline时,在前段页面上故意写错登陆信息,可以发现一个login_form的错误提示信息,它有一个_errors的变量,类型为字典,包含了出错了信息。
所以只需要把这个_errors字典里的信息显示在前端页面就行了,使用的时候可去掉前面的"_"
 
在login.html的大概71行用户名样式代码上,添加如下代码,其中errorput表示当用户名有错误时,用户名的输入框外边缘会标红
同样的,在大概76行密码样式处也添加类似代码
 
在81行左右添加如下代码,让出错信息显示在页面上
 
 
 
 
cookie和session
 
 
一般用户请求服务器端信息,都是无状态请求。用户端请求数据,然后服务端返回数据。下次请求相同数据时重复这样的操作
 
cookie
有些商业网站想记录用户信息,从而优化用户体验,就需要用到有状态请求,比如淘宝想记录用户的商品浏览记录
用户A想访问淘宝中的手机信息的过程如下:
1)用户向服务器请求手机信息,
2)服务器接收到请求后,首先会判断时候有用户A的信息,没有的话就给用户A分配一个ID=1,并且随手机信息一起返回用户A
3)用户A保存此ID=1到Cookie中
4)用户B在请求时,用上ID=1的cookie信息,就能访问到用户A的相关信息
 
session
但是cookie信息是存在本地的,有一定的安全隐患,为了解决安全问题,就引入了session
1. django中使用login函数,根据用户名和密码生成一个session id的字符串,保存在数据库django_session表中
 
2. 当用户登陆的时候,就可以在django_session表中看到相应的session信息,用户退出时,session信息自动清空
其中session_key发到浏览器叫做session id
 
3. session信息怎么转为用户名和密码的呢,
在django中的settings.py中有一个叫django.contrib.sessions的app。这个app会拦截我们每次的request请求,在request中找到session id,然后在数据表中进行查询,然后通过session key去找到session data,此时直接为我们取出user
在服务器返回浏览器的response中也会直接加上session id
 
 
 
 
二. 用户注册1
 
1. users/views.py中添加用户注册的view
 
2. 配置对应URL
mxonline/urls.py中修改为如下
 
users/urls.py中修改为如下,因为login和register都是users应用下的视图,所以主urls.py可以不变,只在users/urls.py中修改即可
 
3. 在index.html中主页添加url模板,在45行左右修改为
其中users为mxonline/urls.py中命名空间的名字,register为users/urls.py中URL模式的名称
 
4. 修改register.html中css的文件位置
方法1,把文件中的..全部修改为static
方法2,使用static模板,这样的好处是只修改settings.py中的STATIC_URL变量值即可修改所有前端中css的位置
1)在registe.html中第三行添加 {% load staticfiles %}
2) 将原格式href="../css/reset.css" 修改为 href="{% static 'css/reset.css' %}"
 
 
 
 
 

mxonline实战4,用户登陆页面2和用户注册1的更多相关文章

  1. Vuejs实战项目:登陆页面

    1.在view文件夹下创建login文件夹,创建index.vue:代表登录的组件 配置router.js,导入登录组件 import Vue from "vue"; import ...

  2. [PHP] - Laravel - 用户登陆中间件

    前言 Laravel 4中,可以使用Route::filter,而在Laravel 5中,没有了filter.php文件,官方建议使用中间件做. 下面是用户登陆的测试例子,涉及到的一些方法和使用,先参 ...

  3. 用户登陆,退出等基本Action

    用户登陆页面user_login.jsp对应action为login.do: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transiti ...

  4. [PHP]用户登陆中间件

    Laravel 4中,可以使用Route::filter,而在Laravel 5中,没有了filter.php文件,官方建议使用中间件做. 下面是用户登陆的测试例子,涉及到的一些方法和使用,先参见这里 ...

  5. mxonline实战3,编写首页及用户登录页面1

          对应github地址:首页和用户登陆1     一. 显示首页   1. 修改mxonline/setttings.py 在TEMPLATES代码块修改DIRS为 'DIRS': [os. ...

  6. Centos系统创建用户oracle后,用该用户登陆系统,页面加载报错GConf error

    Linux 的 GConf error 解决办法 问题: Centos系统创建用户oracle后,用该用户登陆系统,页面加载报错,导致重新进入Centos系统后出现: GConf error:Fail ...

  7. Django用户登陆以及跳转后台管理页面3

    Django用户登陆以及跳转后台管理页面1http://www.cnblogs.com/ujq3/p/7891774.html Django用户登陆以及跳转后台管理页面2http://www.cnbl ...

  8. Django用户登陆以及跳转后台管理页面2

    请先写好以下,再来替换文件 Django用户登陆以及跳转后台管理页面1http://www.cnblogs.com/ujq3/p/7891774.html from django.shortcuts ...

  9. FastAPI(六十七)实战开发《在线课程学习系统》接口开发--用户登陆接口开发

    接上一篇文章FastAPI(六十六)实战开发<在线课程学习系统>接口开发--用户注册接口开发.这次我们分享实际开发--用户登陆接口开发. 我们先来梳理下逻辑 1.查询用户是否存在2.校验密 ...

随机推荐

  1. Shader.WarmupAllShaders

    [Shader.WarmupAllShaders]

  2. UIScollView

        NSArray 类定义的方法 1.  makeObjectsPerformSelector:@select(aMethod) 简介:让数组中的每个元素 都调用 aMethod 2. makeO ...

  3. NInject在函数中使用

    问题,今天我在使用Ajax的时候,发现请求到后台没法得到对象. 原来的写法是这样的: public class Baoming : IHttpHandler { [Inject] public IBL ...

  4. Golang之指针(point)再探索

    先记录代码 package main import "fmt" /* 声明指针 *T 是指向类型T的值的指针变量的类型 */ func main() { //b := 255 // ...

  5. PhpStorm (强大的PHP开发环境)2017.3.2 附注册方法

    最新版PhpStorm 2017正式版改进了PHP 7支持,改进代码完成功能. PhpStorm 是最好的PHP开发工具,使用它进行PHP开发将会让你感觉到编程的乐趣. 快乐无极终于从oschina看 ...

  6. Java 中的类

    public class Test{ public static void main(String[] args){ Animal a1 = new Dog(); a1.shout();//编译通过 ...

  7. Java中二叉排序树

    package com.ietree.basic.datastructure.tree; import java.util.ArrayDeque; import java.util.ArrayList ...

  8. spark yarn 集群提交kafka代码

    配置好hadoop的环境,具体根据http://blog.csdn.net/u010638969/article/details/51283216博客所写的进行配置. 运行start-dfs.sh启动 ...

  9. python + selenium + Js 处理轮动条

    selenium并不是万能的,有时候页面上操作无法实现的,这时候就需要借助JS来完成了. 常见场景: 当页面上的元素超过一屏后,想操作屏幕下方的元素,是不能直接定位到,会报元素不可见的. 这时候需要借 ...

  10. Java下的框架编程(反射,泛型,元数据,CGLib,代码动态生成,AOP,动态语言嵌入)

    Java 虽然没有动态语言般暴起,但仍然天连天,水接水的生出好多框架技术---反射(reflection),泛型(generics),元数据(annotation),proxies(proxy/cgl ...