美文网首页
Django状态保持与表单

Django状态保持与表单

作者: 昆仑草莽 | 来源:发表于2019-07-09 10:26 被阅读0次

上衣章节我们知道了浏览器的cookie保存,但是,浏览器存储cookie的方式不太安全,那有没有更好些的来存储登入状态的方式呢???

状态保持----cookie和session:

cookie是保存在浏览器客户端的,而session是保存在服务器端的,相对来说呀哦安全很多。



状态保持:
1、http协议是无状态的:每次请求都是一次新的请求,不会记得之前通信的状态
2、客户端与服务器端的一次通信,就是一次会话实现状态保持的方式:在客户端或服务器端存储与会话有关的数据
3、存储方式包括cookie、session,会话一般指session对象
4、使用cookie,所有数据存储在客户端,注意不要存储敏感信息
5、使用sesison方式,所有数据存储在服务器端,在客户端cookie中存储session_id
6、状态保持的目的是在一段时间内跟踪请求者的状态,可以实现跨页面访问当前请求者的数据

  • 注意:不同的请求者之间不会共享这个数据,与请求者一一对应
    启用session:
    在settings.py文件中,默认是都有的启用的。
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions', #session
    'django.contrib.messages',
    'django.contrib.staticfiles',
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',#session
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',

注: 使用session之前需要先执行makemigrations,migrate的模型映射文件命令,在数据库中有生成django_session的表格.
使用session:
启用会话后,每个HttpRequest对象将具有一个session属性,它是一个类字典对象

  • get(key, default=None):根据键获取会话的值
  • flush():删除当前的会话数据并删除会话的Cookie
def s_index(request):
    username = request.session.get('username','未登录')
    return render(request,'student/s_index.html',context={'username':username})



class Addstudent(View):
    def get(self,request):
        form_student = StudentForm()
        return render(request,'student/s_add.html',context={'form':form_student})
    def post(self,request):
        form_student = StudentForm(request.POST)
        if form_student.is_valid():
            student_id = form_student.cleaned_data.get('student_id')
            username = form_student.cleaned_data.get('username')
            Student.objects.create(s_id=student_id,s_name=username)
            return HttpResponse('注册成功')

        else:
            return HttpResponse('输入不符合,请检查')


def logout(request):
    request.session.flush()#删除session
    return redirect(reverse('s_index'))

会话过期时间:

  • set_expiry(value):设置会话的超时时间
  • 如果没有指定,则两个星期后过期
  • 如果value是一个整数,会话将在values秒没有活动后过期
  • 若果value是一个imedelta对象,会话将在当前时间加上这个指定的日期/时间过期
  • 如果value为0,那么用户会话的Cookie将在用户的浏览器关闭时过期
  • 如果value为None,那么会话永不过期
def login(request):
    if request.method == 'GET':
        return render(request, 'student/s_index.html')
    elif request.method == 'POST':
        username = request.POST.get('username')
        request.session['username'] =  username #将username保存到session数据库中
        request.session.set_expiry(0) #浏览器关闭就失效
        return redirect(reverse('s_index'))

会话过期时间:可以不配置,都是默认的选项
我们实现了登录状态的保持了,�接下来,如果需要注册登录呢?

登录注册实现思路:


登录注册第一步--创建模型生成数据表:model.py文件中

from django.db import models

# Create your models here.

class UserModel(models.Model):
    username = models.CharField(max_length=20,null=False)
    password = models.CharField(max_length=50)
    email = models.EmailField()
    def __str__(self):
        return 'username={},password={},email={}'.format(
            self.username,self.password,self.email
        )

执行映射文件生成数据表

mysql> show tables;
+----------------------------+
| Tables_in_mydb             |
+----------------------------+
| auth_group                 |
| auth_group_permissions     |
| auth_permission            |
| auth_user                  |
| auth_user_groups           |
| auth_user_user_permissions |
| db_test_course             |
| db_test_course_student     |
| db_test_department         |
| db_test_stu_detail         |
| db_test_student            |
| django_admin_log           |
| django_content_type        |
| django_migrations          |
| django_session             |
| models_user                | #建立的user表
+----------------------------+
16 rows in set (0.00 sec)

form表单的引用:(django的表单比较鸡肋,但是好处是可以做验证,这样可以节省很多代码。)
登录页面和注册页面都会用到form表单来提交数据
当数据提交到后台后,需要在视图函数中去验证数据的合法性.
django中提供了一个form表单的功能,这个表单可以用来验证数据的合法性还可以用来生成HTML代码
今天的登录注册案例我们就来使用这个django自带的form来生成前端页面以及验证数据.
关于django form表单的使用:
1、 创建一个forms.py的文件,放在指定的app当中,然后在里面写表单.
2、表单是通过类实现的,继承自forms.Form,然后在里面定义要验证的字段.
3、 在表单中,创建字段跟模型是一模一样的,但是没有null=True或者blank=True等这几种参数了,有的参数是required=True/False.
4.、使用is_valid()方法可以验证用户提交的数据是否合法,而且HTML表单元素的name必须和django中的表单的name保持一致,否则匹配不到.
5.、is_bound属性:用来表示form是否绑定了数据,如果绑定了,则返回True,否则返回False.
6.、cleaned_data:这个是在is_valid()返回True的时候,保存用户提交上来的数据.
form表单例子:在app中建立form.py 文件

class StudentForm(forms.Form):
    username = forms.CharField(max_length=20,min_length=4)
    password = forms.CharField(min_length=4,max_length=20,widget=forms.PasswordInput(attrs={'placeholder':'请输入密码'}),
                               error_messages={'min_length': '密码长度小于4',
                                               'max_length': '密码长度超过20了'})
    password_repeat = forms.CharField(min_length=4, max_length=20, widget=forms.PasswordInput(attrs={'placeholder': '请再次输入密码'}),
                               error_messages={'min_length': '密码长度小于4',
                                               'max_length': '密码长度超过20了'})
    email = forms.EmailField()
<body>
<form action="" method="post">{% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="提交">
</form>
class Addstudent(View):
    def get(self,request):
        form_student = StudentForm()
        return render(request,'student/s_add.html',context={'form':form_student})
    def post(self,request):
        form_student = StudentForm(request.POST)
        if form_student.is_valid():
            username = form_student.cleaned_data.get('username')
            password = form_student.cleaned_data.get('password')
            password_repeat = form_student.cleaned_data.get('password_repeat')
            emial = form_student.cleaned_data.get('email')
            if password == password_repeat:
                UserModel.object.get(username=username,password=password,email=email)
                return HttpResponse('注册成功')
            else:
                return HttpResponse('注册失败')

form表单中的一些参数说明:
max_length 最大长度
min_length 最小长度
widget 负责渲染网页上HTML 表单的输入元素和提取提交的原始数据
attrs 包含渲染后的Widget 将要设置的HTML 属性
error_messages 报错信息
注:虽然form可以生成前端页面,但这个功能实际用的少,主要是是用form表单的验证功能.

相关文章

  • Django状态保持与表单

    上衣章节我们知道了浏览器的cookie保存,但是,浏览器存储cookie的方式不太安全,那有没有更好些的来存储登入...

  • 02 通过留言版功能回顾django基础知识

    一、django目录介绍 二、配置表单页面 三、django orm介绍与model设计

  • Django表单(二)

    什么是django表单 django中的表单不是html中的那个表单,这里是指django有一个组件名叫表单 它可...

  • Django表单

    Django表单 一、构建表单 1.直接构建表单 2.Django构建表单 (1)Form 类 forms.py ...

  • Forms#-表单基础

    在Django中创建表单 表单# forms.pyfrom django import formsclass Na...

  • Django--状态保持

    cookie --记住用户名案例。 1、设置cookie cookie是由服务器生成,存储在浏览器端的一小段文本信...

  • Django视图_状态保持

    一.状态保持 状态保持的两种方法: 在客户端存储信息使用Cookie 在服务器端存储信息使用Session ① C...

  • 10 Form表单

    一:什么是Form?什么是Django Form Django的表单系统中,所有的表单类都作为django.for...

  • Django ModelForm and Form

    django表单系统中,所有的表单类都作为django.forms.Form的子类创建,包括ModelForm 关...

  • Django表单使用介绍

    Django版本:2.1.3Django表单非常强大,熟悉后可以大大提高工作效率。 Django表单分为两种使用方...

网友评论

      本文标题:Django状态保持与表单

      本文链接:https://www.haomeiwen.com/subject/zijtkctx.html