Django中实现登录功能
上一节当中简单的介绍到了Django框架以及它的安装,启动,这次介绍一下使用Django实现登录功能。
要想实现登录功能肯定得使用form表单来接收用户传入的信息,form表单中有以下注意事项:
1、form表单中必须有method和action。method指的是提交方式,action指的是提交目标
2、所有获取用户输入的表单标签要放在form表单里面,表单标签必须要有name属性
3、form表单必须要有submit按钮进行提交
在form表单中method的提交方式主要分为两种:GET和POST
GET:向服务端请求一个网页的时候搜索引擎时,使用GET
POST:使用表单向服务器提交数据时使用POST
#1、区别1: 参数的组织方式不同 GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连, 例 如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0 %E5%A5%BD。如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密,得出如: %E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII。 POST方法是把提交的数据放在HTTP包的Body中. 因此,GET提交的数据会在地址栏中显示出来,而POST提交,地址栏不会改变 #2、区别2:传输数据大小限制 首先声明:HTTP协议没有对传输的数据大小进行限制,HTTP协议规范也没有对URL长度进行限制。 而在实际开发中存在的限制主要有: GET:特定浏览器和服务器对URL长度有限制,例如 IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器,如Netscape、FireFox等,理论上没有长度限制,其限制取决于操作系 统的支持。 因此对于GET提交时,传输数据就会受到URL长度的 限制。 POST:由于不是通过URL传值,理论上数据不受 限。但实际各个WEB服务器会规定对post提交数据大小进行限制,Apache、IIS6都有各自的配置。 可以简单总结为: GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制. GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值。 #3、区别3:安全性 POST的安全性要比GET的安全性高。比如:通过GET提交数据,用户名和密码将明文出现在URL上,因为(1)登录页面有可能被浏览器缓存;(2)其他人查看浏览器的历史纪录,那么别人就可以拿到你的账号和密码了,除此之外,使用GET提交数据还可能会造成Cross-site request forgery攻击
app
Django中app与project的关系:
project(学校)--app(学院)
创建app
1、通过命令行创建
python3 manage.py startapp app01
使用这种方式,在创建完成之后,一定要记得在settings.py当中将你创建好的app添加进去
#所有安装的app INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'app01', # 'app01.apps.App01Config', ]
2、在创建Django项目的同时,创建app
ORM简介
概念:
对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。
简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。
ORM在业务逻辑层和数据库层之间充当了桥梁的作用。
由来:
让我们从O/R开始。字母O起源于"对象"(Object),而R则来自于"关系"(Relational)。
几乎所有的软件开发过程中都会涉及到对象和关系数据库。在用户层面和业务逻辑层面,我们是面向对象的。当对象的信息发生变化的时候,我们就需要把对象的信息保存在关系数据库中。
按照之前的方式来进行开发就会出现程序员会在自己的业务逻辑代码中夹杂很多SQL语句用来增加、读取、修改、删除相关数据,而这些代码通常都是重复的。
优势:
ORM解决的主要问题是对象和关系的映射。它通常把一个类和一个表一一对应,类的每个实例对应表中的一条记录,类的每个属性对应表中的每个字段。
ORM提供了对数据库的映射,不用直接编写SQL代码,只需像操作对象一样从数据库操作数据。
让软件开发人员专注于业务逻辑的处理,提高了开发效率。
劣势:
ORM的缺点是会在一定程度上牺牲程序的执行效率。
ORM用多了SQL语句就不会写了,关系数据库相关技能退化...
ORM总结:
ORM只是一种工具,工具确实能解决一些重复,简单的劳动。这是不可否认的。
但我们不能指望某个工具能一劳永逸地解决所有问题,一些特殊问题还是需要特殊处理的。
但是在整个软件开发过程中需要特殊处理的情况应该都是很少的,否则所谓的工具也就失去了它存在的意义。
Django中的ORM
在Django项目中使用MySQL数据库主要有以下几步:
1、在Django项目的settings.py文件中添加数据库连接信息:
DATABASES = { "default": { "ENGINE": "django.db.backends.mysql", "NAME": "你的数据库名称", # 需要自己手动创建数据库 "USER": "数据库用户名", "PASSWORD": "数据库密码", "HOST": "数据库IP", "POST": 3306 } }
2、在Django项目当中__init__.py文件告诉Django使用pymysql模块连接MySQL数据库(Django默认使用的是MySQLdb模块连接数据库,指定pymysql模块代替MySQLdb)
import pymysql pymysql.install_as_MySQLdb()
3、在app/models.py文件中定义类
在Django中model是你数据的单一、明确的信息来源。它包含了你存储的数据的重要字段和行为。通常,一个模型(model)映射到一个数据库表,
基本情况:
1、每个模型都是一个Python类,它是django.db.models.Model的子类。
2、模型的每个属性都代表一个数据库字段。
3、Django为我们提供了一个自动生成的数据库访问API
4、执行创建表的操作
在命令行中输入以下命令:
1、将models.py的修改登记到小本本上
python3 manage.py makemigrations
2、将修改翻译成SQL语句,去数据库执行
python3 manage.py migrate
执行以上操作一定要保证python解释器的环境变量添加到系统变量当中,否则无法实现
操作完成之后查看表:
接下来我们就可以为表添加记录