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来增加/查询该实体:
- 定义User字段:
字段 | 解释 |
---|---|
id | 自增id,主键 |
username | 用户名 |
password | 密码 |
邮箱 |
在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 #执行数据库变动的那个操作
即可在数据库中看到我们添加的表
- 设计接口
我们打算使用以下接口来增加,访问和增加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”: "123@123.com"
}
然后是创建实体的功能:
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创建时可以直接创建出来,并且主要功能代码也已经放上来了,这里就不在上传代码了。