Django/Django REST相关知识

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/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值