[django学习记录] - No.1 使用django创建一个简单的API

Django学习记录

1. 创建Django项目

使用pycharm的话可以直接选择django 项目。如果想要使用命令行,可以在命令行中输入以下命令:

django-admin startproject myproject

其中myproject是你的项目名称。不过我们更推荐用pycharm。因为使用命令行原生的项目,需要自己手动创建一些项目,和补全一些配置文件的选项。

然后你就会得到一个如下图所示的项目

E:.
manage.py

├─mysite123
settings.py
urls.py
wsgi.py
init.py

└─templates

其中,各个文件的作用如下:

  • settings.py:进行全局配置,配置项目路径,模板文件路径,数据库等
  • urls.py: 配置路由映射,配置url对应的处理函数
  • wsgi.py: 项目启动的文件
  • template:存放模板文件的文件夹

直接在pycharm中启动项目,或者使用命令行启动:

 python manage.py runserver 8080

即可在浏览器中访问到成功界面

2. 创建数据库表

django中为我们默认提供了很多的功能,也设置了很多的数据库表。在我们使用功能之前需要先创建数据库表

首先需要在settings.py中设置数据库信息:

# Database
# https://docs.djangoproject.com/en/1.11/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'testdjango',
        'USER': '你的用户',
        'PASSWORD': '你的密码',
        'HOST': '127.0.0.1'
    }
}

然后在命令行中输入以下命令:

python manage.py makemigrations  # 检测是否有数据库表变动

python manage.py migrate         #执行数据库变动的那个操作

然后就会在我们的数据库中创建诸多的默认表

3. 创建具体功能(app)

当我们需要具体的功能的时候,我们需要创建app。在命令行中输入以下命令:

python manage.py startapp myapp1

然后就会在当前项目创建myapp1文件夹,里面文件如下:

E:.
admin.py
apps.py
models.py
tests.py
views.py
init.py

└─migrations
init.py

各个文件作用如下:

  • admin.py:它是我们的后台管理工具 , 后期我们的可以通过他管理我们的model和数据库
  • apps.py:这个是django的生成app名称的文件
  • models.py:模型文件 里面放的都是数据库表的映射
  • tests.py:测试文件

需要在settings.py里把我们创建的myapp1的路径加入INSTALLED_APPS中(需要将myapp1完整的路径加进去)

4.一个简单的API开发

在这里,我们创建一个名为USER的model,定义访问的api接口,然后通过postman来增加/查询该实体:

  1. 定义User字段:
字段 解释
id 自增id,主键
username 用户名
password 密码
email 邮箱

在models.py中创建一个用户:

from django.db import models

# Create your models here.


class User(models.Model):
    id = models.IntegerField(auto_created=True,primary_key=True)
    username = models.CharField(max_length=20,null=False,unique=True)
    password = models.CharField(max_length=20,null=False)
    email = models.CharField(max_length=40,null=False)
    
    def __str__(self):
        return "id is %d username is %s password is %s email is %s ".format(self.id,self.username,self.password,self.email)

    def to_json(self): #将User类转换为JSON字符串
        import json
        return json.dumps(dict([(attr, getattr(self, attr)) for attr in [f.name for f in self._meta.fields]]))


在命令行中,为实体创建数据库:

python manage.py makemigrations  # 检测是否有数据库表变动

python manage.py migrate         #执行数据库变动的那个操作

即可在数据库中看到我们添加的表

  1. 设计接口

我们打算使用以下接口来增加,访问和增加user

url 功能
127.0.0.1:8080/user/{id} get方式访问某个实体
127.0.0.1:8080/user/add post方式增加一个实体

在urls.py中,声明url和对应的处理函数:

from django.conf.urls import url
from django.contrib import admin
from myapp1.views import *
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^user/(?P<uid>\d+)/$',get_user,name='uid'), #使用正则表达式方式,匹配/user/123形式
    url(r'^user/add/',insert_user)
]

在view.py中,定义两个url对应的处理函数.

首先是通过get方式访问实体。和springboot不同的是,django在request上是不区分GET还是POST的,我们需要访问method字段来判断是否为GET。这部分代码及注释如下:

def get_user(request,uid):
    if request.method == 'GET':                        #判断是否为GET
        tmp_user = User.objects.get(id=uid)            #通过id获取一个model,这里返回的是一个model。
        json_user = json.loads(tmp_user.to_json())     #model不可以序列化为JSON字符串,必须要调用to_json()。然后使用json.loads()加载为json对象
        response = JsonResponse(json_user,safe=False)  #将json对象放入response

        '''
        tmp_users = User.objects.all()                             #获取所有的,这里返回的是一个QueryDict。
        json_users = serializers.serialize('json',tmp_users)       #使用serializers.serialize,将querydict序列化为JSON字符串
        response = JsonResponse(json.loads(json_users),safe=False) #然后使用json.loads()加载为json对象
        '''
        return response

{
“id”: 1,
“username”: “username”,
“password”: “123456”,
“email”: "[email protected]"
}

然后是创建实体的功能:

def insert_user(request):
    if request.method == 'POST':    #判断是否为POST
        req = request.POST          #获取request中的QueryDict
        try:
            User.objects.create(username=req['username'],password=req['password'],email=req['email']) #创建一个User
            return JsonResponse({'status':200,'msg':'success'})  #创建成功
        except Exception as e:
            print(e)
            return JsonResponse({'status':500,'msg':'fail'}) #创建失败
    else:
        return HttpResponseBadRequest()

P.S.由于主要内容在使用Pycharm创建时可以直接创建出来,并且主要功能代码也已经放上来了,这里就不在上传代码了。

发布了118 篇原创文章 · 获赞 140 · 访问量 25万+

猜你喜欢

转载自blog.csdn.net/tjuyanming/article/details/88030655