在django中,对于基于类的视图,ListView和类似的DetailView方法get()或者post()由开发人员定义的其他函数采用参数include self和request.我了解到,在self这些实际上是一个self.request领域,所以self.request和它之间的区别是request什么?
例如,这是基于类的视图中的函数,用于处理用户的登录要求:
def login(self, request):
name = request.POST['name']
pwd = request.POST['password']
user = authenticate(username=name, password=pwd)
if user is not None:
request.session.set_expiry(0)
login(request, user)
log_message = 'Login successfully.'
else:
log_message = 'Fail to login.'
return HttpResponseRedirect(reverse('blog:testindex'))
Run Code Online (Sandbox Code Playgroud)
这是用于处理用户注册的函数:
def register(self, request):
user_name = self.request.POST['username']
firstname = self.request.POST['firstname']
lastname = self.request.POST['lastname']
pwd = self.request.POST['password']
e_mail = self.request.POST['email']
user = User.objects.create(username=user_name, first_name=firstname, last_name=lastname, email=e_mail) …Run Code Online (Sandbox Code Playgroud) 假设有一个模型命名User,另一个命名与之Pet有OneToOne关系User,Pet模型有一个属性age,如何获得User拥有十大oldest狗的十个?
class User(models.Model):
name = models.CharField(max_length=50, null=False, blank=False)
class Pet(models.Model):
name = models.CharField(max_length=50, null=False, blank=False)
owner = models.OneToOneField(User, on_delete=models.CASCADE)
age = models.IntegerField(null=False)
Run Code Online (Sandbox Code Playgroud)
在User,有一个属性friends,有一个ManyToMany与关系User,如何让十friends的User Tom拥有十大oldest狗?
class User(models.Model):
name = models.CharField(max_length=50, null=False, blank=False)
friends = models.ManyToManyField(self, ...)
class Pet(models.Model):
name = models.CharField(max_length=50, null=False, blank=False)
owner = models.OneToOneField(User, on_delete=models.CASCADE)
age = models.IntegerField(null=False)
Run Code Online (Sandbox Code Playgroud)