Django配合bootstrap实现分页
https://simpleisbetterthancomplex.com/tutorial/2016/08/03/how-to-paginate-with-django.html
Django设置代码改动之后不重启
参考:
https://stackoverflow.com/questions/36420833/django-is-there-a-way-to-keep-the-dev-server-from-restarting-when-a-local-py-f/36420989
python3 manage.py runserver 0.0.0.0:8004 --noreload
Django数据库迁移
python manage.py makemigrations && python manage.py migrate
第一步生成数据库文件/初始化数据库,产生migrations/0001_initial.py文件;
第二步根据migrations/0001_initial.py文件创建表。
参考:https://stackoverflow.com/questions/25771755/django-operationalerror-no-such-table
Django重置admin密码
若还没有超级管理员,需要创建之:
python2 manage.py createsuperuser
python2 manage.py shell
In [1]: from django.contrib.auth.models import User
In [2]: user = User.objects.get(pk=1)
In [3]: user
Out[3]: <User: admin>
In [4]: user.set_password('admin')
In [5]: user.save()
In [6]: quit()
参考:https://blog.csdn.net/GeekLeee/article/details/73251153
查看Django版本
python3 -c 'import django; print(django.VERSION)'
python2 -c 'import django; print(django.VERSION)'
Django REST框架
认证方式
JSON Web Tokens (JWT)
JSON Web Tokens (JWT) in for this scheme. The beauty of using JWT, is that you don’t need to save the token in a database.
好处是不需要把他们存在数据库中。
参考:
https://medium.com/backticks-tildes/lets-build-an-api-with-django-rest-framework-part-2-cfb87e2c8a6c
Token Authentication
参考:
https://simpleisbetterthancomplex.com/tutorial/2018/11/22/how-to-implement-token-authentication-using-django-rest-framework.html
前提是需要在settings.py中进行配置。
1、INSTALLED_APPS
中
加上:
rest_framework.authtoken
2、在REST_FRAMEWORK
中的’DEFAULT_AUTHENTICATION_CLASSES’值设置为:
'rest_framework.authentication.TokenAuthentication'
如果是第一次设置,需要执行命令用于在数据库中添加一个authentication tokens的表。
加上认证之后,访问API如果不带上认证信息会返回这样的结果:
表示需要token进行认证。
下面显示通过一个登录接口进行认证,然后服务端生成token,并将token返回给客户端:
下图显示数据库中已经有了新生成的对应的token了:
python3 manage.py migrate
这种方式是跟创建的用户相关的:
python3 manage.py createsuperuser --username admin --email admin@example.com
即必须先有一个合法的用户,才能通过这种方式进行认证。
或者为admin用户创建一个临时的token:
python3 manage.py drf_create_token admin
如果带上token(通过API接口登录之后返回的、通过临时生成的)再访问之前的API:
则访问成功:
如何获取一个token
Django REST框架提供了一个获取token的方式:
需要在urls.py中写:
import from rest_framework.authtoken import views
path('api/login/', views.obtain_auth_token)
表示api/login/
这个端点是用于获取token的(通过Django REST官方提供的rest_framework.authtoken.views.obtain_auth_token
)。
然后获取到token之后,如何带上这个token进行后续API的请求,取决于具体的HTTP客户端了。如果是Angular,可以把token存在localStorage中;如果是桌面版命令行程序,可以把它存在文本文件中。
不过缺点是:一个user一个token,且没有内置的方式可以设置过期时间。
参考:
https://sunscrapers.com/blog/ultimate-tutorial-django-rest-framework-part-1/
Django REST的CRUD操作(对Object的增删改查操作)
Django REST提供了一个方便的工具:ViewSet
。然后使用ModelViewSet
可以将代码量降低到最少。
在models.py中定义好各种class;在serializers.py中定义好各种class,
然后只需要在一个viewsets.ModelViewSet的子类中,声明queryset为models.py中的某个类,serializer_class为serializers.py中的某个类。
from rest_framework import viewsets
from . import models
from . import serializers
class FriendViewset(viewsets.ModelViewSet):
queryset = models.Friend.objects.all()
serializer_class = serializers.FriendSerializer
class BelongingViewset(viewset.ModelViewSet):
queryset = models.Belonging.objects.all()
serializer_class = serializers.BelongingSerializer
class BorrowedViewset(viewsets.ModelViewSet):
queryset = models.Borrowed.objects.all()
serializer_class = serializers.BorrowedSerializer
#TODO
Django REST的认证方式
参考:
https://stackoverflow.com/questions/26639169/csrf-failed-csrf-token-missing-or-incorrect
如果使用了这个认证方式:SessionAuthentication
,则后端会进行CSRF检查
。需要添加一个请求头:X-CSRFToken
,
X-CSRFToken: 9oaH1dtzFb7FSEUUGB9H9ZFT1i0ZCr0THjVo80uNVDanhXd3vzc5XfY8J6uPrEAg
否则会出现:
第二种认证方式是:
TokenAuthentication
。这种不需要进行CSRF检查。
附录
Django工作原理简介
https://www.cnblogs.com/hanfei-1005/p/5688428.html
Django的ORM与SQL语句的对应关系常见示例:
https://amitness.com/2018/10/django-orm-for-sql-users/