セッション状態を維持するために、Djangoフレームワーク11 - 基本とフォーム

ブラウザは、状態のログイン方法、それを格納するためには良いがないこと、クッキーの道安全性の低いを格納???

----クッキーとセッションを維持しながら:

 

状態が残っています:

1.httpプロトコルはステートレスです:新しい要求が毎回ある通信前の状態を覚えていないだろう要求

クライアントまたはサーバが格納されたセッションに関連するデータ:通信セッションは、クライアントとサーバ2.ホールド状態を達成するための一つの方法であります

3.クッキーを含むストレージは、セッション、セッションは、一般的にセッションオブジェクトを指し

クッキーを使用して\ 4、クライアントに保存されているすべてのデータは、機密情報を保存しないように注意してください

5. sesisonの実施例は、サーバー側で、クライアントは、すべてのデータは、クッキーの店SESSION_IDに保存されています

目的は、現在、依頼者が達成することができ、時間をかけて状態6依頼者の状況を追跡ページにわたるデータへのアクセスを維持することです

- 注:このデータは、異なるリクエスタの間で共有されていない、要求に対応

セッションを有効にします:

デフォルトでは有効になっていますさ

settings.pyファイルで

 

 

注意:あなたがmakemigrationsを実行する必要があり、セッションを使用する前に、モデルマッピングファイルコマンドを移行し、データベースにdjango_sessionテーブルを生成しています。

セッションを使用します。

セッションを有効にした後、それぞれのHttpRequestオブジェクトは辞書ライクオブジェクトであるセッション属性を、持っています

- (キー、デフォルト=なし)を取得:に従い、セッションキーの値を取得します。

- クリア():クリアすべてのセッション

- フラッシュ():現在のセッションデータを削除し、セッションクッキーを削除します

- デルますrequest.session [ 'MEMBER_ID'] - :删除

ユーザーは例をログに記録しました:

 

1.対象が読み取りだけでなく、辞書などを書くことができ、現在のセッションを表します。

2.ログイン時にログインを設定した情報を使用しますrequest.session。

3.メインページに設定された値を取得し、その後、テンプレートに渡さ。

4. request.session.flush()セッションデータを消去します。

ユーザログインの例:

 

セッションの有効期限:

  • set_expiry(値):設定されたセッションのタイムアウト

  • 如果没有指定,则两个星期后过期

  • 如果value是一个整数,会话将在values秒没有活动后过期

  • 若果value是一个timedelta对象,会话将在当前时间加上这个指定的日期/时间过期

  • 如果value为0,那么用户会话的Cookie将在用户的浏览器关闭时过期

  • 如果value为None,那么会话永不过期

 

 

可以不配置,那么都是默认的选项

我们实现了登录状态的保持了, 接下来,如果需要注册登录呢?

登录注册实现思路:

 

登录注册第一步--创建模型生成数据表:

 

执行映射文件生成数据表

 

 

form表单的引用:

登录页面和注册页面都会用到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表单例子:

 

 

可以生成前端页面,也可以用来验证数据的合法性.

 

 

注册的form表单:

 

 

form表单中的一些参数说明:

max_length 最大长度

min_length 最小长度

widget 负责渲染网页上HTML 表单的输入元素和提取提交的原始数据

attrs 包含渲染后的Widget 将要设置的HTML 属性

error_messages 报错信息

注:虽然form可以生成前端页面,但这个功能实际用的少,主要是是用form表单的验证功能.

注册的视图函数:

from .forms import RegisterFrom

from .models import UserModel

def register(request):

if request.method == 'GET':

form = RegisterFrom()

return render(request,'ts22/register.html',

context={'form':form})

elif request.method == 'POST':

form = RegisterFrom(request.POST)

if form.is_valid():

username = form.cleaned_data.get('username')

password = form.cleaned_data.get('password')

password_repeat = form.cleaned_data.get('password_repeat')

email = form.cleaned_data.get('email')

if password == password_repeat:

user = UserModel.objects.create(username=username, password=password,email=email)

return HttpResponse('注册成功!')

else:

return HttpResponse('注册失败!')

else:

return HttpResponse('注册失败!')

将RegisterForm类生成实例,传入模板渲染前端页面d

将获取到的参数传入RegisterForm类,用is_valid()方法验证提交数据的合法性

用cleaned_data获取单个数据对象值

登录的form表单及模板:

 

 

登录视图函数:

 

form.as_p,加p标签

定义模型表单:

from teacher.models import Student,StudentDetails
class StudentForm(forms.ModelForm):
  class Meta:
      model = Students
      exclude = ['is_deleted']
      class StudentDetailForm(forms.ModelForm):
  class Meta:
      model = StudentDetails
      exclude = ['student']

也可以用fields方法指定想要的字段.列表格式.

detail_form = StudentDetailForm(request.POST)

student.detail = detail_form.save(commit=False)

这样就不会真的提交.因为还要加上外键关联对象.

 

form = StudentForm(instance=student)

说明这个表单是student实例的表单,如果没有实例,在执行save()的时候会创建.

括号中不写instance就会生成一个新的实例,写instance就会修改instance

おすすめ

転載: www.cnblogs.com/winfun/p/10968212.html