上节课我们实现了用户的注册,其实并不是真正的注册,只是一个简单的POST请求,所以我们这次来实现一个正正的注册。
我们使用简单的文件存储用户数据来初步的感受一下ORM机制。
首先建立我们的模型。
from .base import Model
class User(Model):
def __init__(self, username, password):
self.username = username
self.password = password
我们这个模型集成了Model这个类,这个模型基类我简单的实现了一下。
import json
class Model:
@classmethod
def get_db_path(cls):
return 'db/' + cls.__name__ + '.txt'
@classmethod
def create_obj(cls, save=True, **kwargs):
if save:
obj = cls(**kwargs)
obj.save()
return obj
else:
return cls(**kwargs)
def save(self):
"""
这里只实现了用户的增加
常见的ORM框架的保存不仅可以添加而且还可以更新用户信息
等做到用户个人信息的功能的时候我们再修改
"""
with open(self.get_db_path(), 'a') as f:
data_str = json.dumps(self.__dict__)
f.write(data_str + '\n')
@classmethod
def all(cls):
obj_list = []
with open(cls.get_db_path()) as f:
for line in f:
obj_dict = json.loads(line)
obj = cls.create_obj(save=False, **obj_dict)
obj_list.append(obj)
return obj_list
@classmethod
def get_by(cls, **kwargs):
objs = cls.all()
for k, v in kwargs.items():
for obj in objs:
if getattr(obj, k) == v:
return obj
@classmethod
def filter_by(cls, **kwargs):
objs = cls.all()
target_objs = []
for k, v in kwargs.items():
for obj in objs:
if getattr(obj, k) == v:
target_objs.append(obj)
return target_objs
下面我们再编写注册路由函数。
def register(request):
if request.method == 'GET':
header = 'HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n'
body = template('register.html')
user_data = [user.username for user in User.filter_by(password='123')]
body = body.replace('{{ message }}', '<br>'.join(user_data))
return header + '\r\n' + body
elif request.method == 'POST':
data = request.form()
User.create_obj(**data)
body = template('register.html')
body = body.replace('{{ message }}', '注册成功')
header = 'HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n'
return header + '\r\n' + body
else:
return error(request)
GET请求我们显示所有已经注册的用户的用户名。
这里我们简单的ORM就已经实现了,可以将用户的信息保存在文件中,也可以取出符合条件的用户。
最后一步就是更新我们的路由字典了。
router_dict = {
'/': index,
'/register': register,
}
网友评论