author:once Day date:2022年2月13日
本文档在于总结相关内容,零散的知识难以记忆学习。
本文档基于windows平台。
全系列文档查看:Django基础知识_CSDN博客。
1.表单form为了接受用户注册信息,需要在前端界面接受信息,这里将编写注册页面和登入页面:
这里面主要是HTML5的知识,可以参考:基础HTML5网页知识。
此外,由于发送了一个POST请求,就必须考虑一个跨站请求伪造的安全问题,简称CSRF。Django为你提供了一个简单的方法来避免这个困扰,那就是在form表单内添加一条{% csrf_token %}标签,标签名不可更改,固定格式,位置任意,只要是在form表单内。这个方法对form表单的提交方式方便好使,但如果是用ajax的方式提交数据,那么就不能用这个方法了。
此时再修改视图文件login/views.py,
from django.shortcuts import renderfrom django.http import HttpResponse,Http404,HttpResponseRedirectfrom django.urls import reverse#导入账户模型from login.models import account,user_informationfrom django.utils import timezone# Create your views here.#定义一个函数,或者说一个网页def user_login(request):#浏览器送出 HTTP Request return HttpResponse("欢迎来到once Day的个人网站!")#提供注册界面def user_rigister(request): return render(request,'login/rigister.html',{})#提供注册信息提交操作def user_rigister_info(request): try: #创建新用户 new_user =user_information.objects.create(user_name=request.POST['user_name'],user_birthday=timezone.now(),user_money=1000) #创建账户信息 new_user.account_set.create(account_name=request.POST['account_id'],password=request.POST['password']) except KeyError: return Http404("输入数据存在问题!") else: new_user.save()#保存账号信息 return HttpResponseRedirect(reverse('login:inf',args=(request.POST['account_id'],)))def information(request,account_id): try: my_account=account.objects.get(account_name=str(account_id)) user=my_account.user#获取关联的用户信息) account_exist=True context = {'user': user,'account_exist':account_exist} except account.DoesNotExist: context = {'user': [],'account_exist':False} raise Http404("该账号不存在!!!") return render(request,'login/inf.html',context)
其中:
request.POST是一个类似字典的对象,允许你通过键名访问提交的数据。本例中,request.POST[’user_name’]返回填写的名字,并且值的类型永远是string字符串,哪怕它看起来像数字!同样的,你也可以用类似的手段获取GET请求发送过来的数据,一个道理。request.POST[’user_name’]有可能触发一个KeyError异常,如果你的POST数据里没有提供user_name键值,在这种情况下,上面的代码会返回表单页面并给出错误提示。最后返回的是一个HttpResponseRedirect而不是常用的HttpResponse。HttpResponseRedirect需要一个参数:重定向的URL。这里有一个建议,当你成功处理POST数据后,应当保持一个良好的习惯,始终返回一个HttpResponseRedirect。这不仅仅是对Django而言,它是一个良好的WEB开发习惯。我们在上面HttpResponseRedirect的构造器中使用了一个reverse()函数。它能帮助我们避免在视图函数中硬编码URL。它首先需要一个我们在URLconf中指定的name,然后是传递的数据。例如'/login/3/inf/',其中的3是某个account_id的值。重定向后将进入login:inf对应的视图,并将account_id传递给它。白话来讲,就是把活扔给另外一个路由对应的视图去干。
具体推荐阅读文档:django Part 4:表单和类视图 - 刘江的django教程 (liujiangblog.com)
然后修改urls.py,
#login/urls.pyfrom django.urls import path#导入编写的视图函数from login import viewsapp_name = 'login' #提供命名空间urlpatterns = [ path('', views.user_login,name="index"),#index是默认的主页面 #注册界面 path('rigister',views.user_rigister,name="rigister"), #注册提交信息 path('rigister_info',views.user_rigister_info,name="rigister_info"), #访问/login/id/inf获取账户详细信息 path("
保存后运行,浏览器输入(http://127.0.0.1:8000/login/rigister),就可以看到注册页面,填写后提交,成功注册就会转到账户信息界面,并正确显示信息。
django第一个应用就到此结束,后面将是独立的专题内容!
注:本文章内容收集总结于互联网,仅供学习之用!