FBV,CBV
FBV(function base views) 就是在视图里使用函数处理请求,也是我们最开始接触和使用的方式。
urls.py
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^login/$', views.login),
]
views.py
def login(request):
message = ""
if request.method == "POST":
user = request.POST.get('username')
pwd = request.POST.get('password')
c = Administrator.objects.filter(username=user, password=pwd).count()
if c:
request.session['is_login'] = True
request.session['username'] = user
return redirect('/index.html')
else:
message = "用户名或密码错误"
return render(request, 'login.html', {'msg': message})
```
CBV(class base views) 就是在视图里使用类处理请求。
urls.py
urlpatterns = [
url(r’^admin/’, admin.site.urls),
url(r’^login/$’, views.Login.as_view()),
]
views.py
from django import views
from django.utils.decorators import method_decorator
class Login(View):
def get(self, request, *args, **kwagrs):
return render(request, ‘login.html’)
def post(self, request, *args, **kwagrs):
user = request.POST.get('username')
pwd = request.POST.get('password')
c = Administrator.objects.filter(username=user, password=pwd).count()
if c:
request.session['is_login'] = True
request.session['username'] = user
return redirect('/index.html')
else:
message = "用户名或密码错误"
return render(request, 'login.html', {'msg': message})
```
serializers序列化
django的序列化框架提供了一个把django对象转换成其他格式的机制,通常这些其他的格式都是基于文本的并且用于通过一个管道发送django对象,但一个序列器是可能处理任何一个格式的(基于文本或者不是)
serializers的方法
from django.core import serializers
data = serializers.serialize(“xml”, SomeModel.objects.all())
序列化指定字段
from django.core import serializers
data = serializers.serialize(‘xml’, SomeModel.objects.all(), fields=(‘name’,‘size’))
序列化继承模型
class Place(models.Model):
name = models.CharField(max_length=50)
class Restaurant(Place):
serves_hot_dogs = models.BooleanField(default=False)
如果你只序列化餐厅模型:
data = serializers.serialize(‘xml’, Restaurant.objects.all())
如果你需要完全序列化
all_objects = list(Restaurant.objects.all()) + list(Place.objects.all())
data = serializers.serialize(‘xml’, all_objects)