环境版本信息:
Django 2.0.7
mysqlclient 1.3.13
pip 10.0.1
Python 3.6.4
用户登陆
简单的login功能函数,通过POST获取到的用户名密码信息会跟数据库中进行比对,如果成功,传参给index.html并返回,如果失败,继续调用login:
def login(request):
if request.method == "GET":
return render(request, "login.html")
if request.method == "POST":
username = request.POST.get("username")
password = request.POST.get("password")
user = userinfo.objects.filter(user = username, password = password)
if user:
return render(request, 'index.html', {'username': username})
# return redirect('/index', {'username': username})
else:
return render(request, 'login.html')
这里登陆成功跳转到index页面,用render方法或redirect方法都是可以实现的。
RESTful API
给个链接参考一下,写的很好:
http://www.cnblogs.com/zivwong/p/7417989.html
用的其实就是Django REST framework
装环境就不说了,pip直接装。我的是djangorestframework 3.8.2
然后需要新建一个app,例如python manage.py startapp apps
简单来说,一个简单的列表功能的实现,需要改5个文件:
settings.py, 加个apps:
INSTALLED_APPS = [
...
'rest_framework',
...
]
views.py,定义一个类:
class ServerList(APIView):
def get(self, request):
gg = serverinfo.objects.all()
serializer = Serverserializer(gg, many=True)
return Response(serializer.data)
urls.py, 加一行url:
path('serverlist/', views.ServerList.as_view()),
models.py,新建类:
class serverinfo(models.Model):
id = models.AutoField(primary_key=True, null=False, verbose_name='ID')
server_name = models.CharField(max_length=50, null=False, verbose_name='服务器名称')
type = models.CharField(max_length=50, null=False, verbose_name='类型')
server_ip = models.CharField(max_length=16, null=False, verbose_name='IP')
建了models之后,不要忘了makemigration和migrate
新建一个文件serializers.py , 这个文件有点儿类似django中的forms.py, 不过功能更强大,代码类似于:
from rest_framework import serializers
class Serverserializer(serializers.Serializer):
id = serializers.IntegerField(read_only=True)
server_name = serializers.CharField(required=True, max_length=50)
type = serializers.CharField(required=True, max_length=50)
server_ip = serializers.CharField(required=True, max_length=16)
然后就可以运行了。这就是一个最简单的restful实现。 当然,实际运行代码会比这个复杂的多。
pip install httpie 安装httpie模块便于对api进行调试
django-guardian
guardian是为Django提供额外的对象权限的身份验证后端。注意,可以对对象进行权限验证。 安装:
pip install django-guardian
settings里文件的配置,两个地方需要更改:
INSTALLED_APPS = [
....
'guardian',
]
....
AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.ModelBackend',
'guardian.backends.ObjectPermissionBackend',
)
修改一下上面的models的serverinfo,增加一个字段外键到User:
from django.db import models
from django.contrib.auth.models import User
class ServerInfo(models.Model):
id = models.AutoField(primary_key=True, null=False, verbose_name='ID')
server_name = models.CharField(max_length=50, null=False, verbose_name='服务器名称')
type = models.CharField(max_length=50, null=False, verbose_name='类型')
server_ip = models.CharField(max_length=16, null=False, verbose_name='IP')
reported_by = models.ForeignKey(User, on_delete=models.CASCADE)
class Meta:
permissions = (
('view_task', 'View task')
)
注意后面的reported_by中的on_delete,这儿有雷。在django2.0后续的版本中必须要加这个on_delete后面这一串, 否则会报错,参考https://www.cnblogs.com/phyger/p/8035253.html
另外说明一下:Meta中的permissions是我们自定义的权限,当我们调用migrate命令的时候,view_task将会被添加到默认的权限集合中。
默认情况下Django为每个model准备了3个权限:
add_model名
change_model名
delete_model名
![]() |
![]() |