Python3+PyCharm+Django+Django REST framework配置与简单开发教程

一、说明

自己一是想跟上潮流二是习惯于直接干三是没有人可以请教,由于这三点经常搞得要死要活。之前只简单看过没写过Diango,没看过Django REST framework,今天一步到位直接上又撞上了南墙。在此记一下以备忘,也希望对后来者能有所帮助。本文相当于Django REST framework官方文档的重新实现。

1.1 Django是什么

Django是当下流行的一个python语言的web框架,类似于java的struts2,(如果struts2太旧不懂那也可以理解为spring boot)。

1.2 Django REST framework是什么

Django类似于struts2,也就是说其是mvc模式的,也就是说其v是前后端强耦合的,但现在都讲REST。

Django REST framework就是Django的REST化库,用于实现Django的REST化。

二、开发环境搭建

2.1 安装PyCharm+conda

参见:https://www.jb51.net/article/205782.htm

2.2 在pycharm中新建项目

 

2.3 安装Django和Django REST framework

依次点开pycharm----菜单----file----settings----project----project interpreter,安装django、djangorestframework、pygments、pytest四个包

djangorestframework在conda-forge源中,如果找不到djangorestframework那应该是没添加conda-forge源的原因(中科大:https://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge/)

或者通过系统菜单开启“Anaconda Prompt”用pip安装,命令如下

conda activate DjangoTest

pip install django
pip install djangorestframework
pip install pygments
pip install pytest

2.4 创建真正的Django项目

在前面中我们已经创建了名称为DjangoTest的项目,但要注意只是我们把名字命名为DjangoTest而已改项目到现在为止其实与Django无关。

Django项目需要通过django-admin命令来创建;所以我们要到项目所在文件夹下将现有DjangoTest文件夹删掉,然后用django-admin命令来重新创建DjangoTest。

(前边创建的DjangoTest的意义,是更多是为了创建DjangoTest虚拟环境。虽然有点绕,但这是我针对Scrapy和Django这种鸡和蛋问题能想到的最好办法)

而django-admin命令的位置,我们可以借助conda env list来查看DjangoTest虚拟环境所在的目录,然后加上\Scripts\django-admin.exe即是其位置。比如我的操作如下:

cd F:\PycharmProjects
F:
rmdir /s /q DjangoTest
conda env list
D:\Language\Miniconda3\envs\DjangoTest\Scripts\django-admin.exe startproject DjangoTest

创建完成后目录结构如下:

 2.5 设置运行环境

django项目需要通过python manage.py runserver形式运行,我们也需要配置成该形式。

依次点击菜单----Run----Edit Configurations----左上角+号----Python,添加运行环境

Name----环境名称,自己随便填

Script path----manage.py所在的路径,改成自己的

Parameters----runserver,ip和端口如果需要直接追加在后边即可

一定要注意,后续不要随便在一个页面就右键run/debug,而是不管修改什么文件在什么位置都要run/debug上边这个环境,不然运行不起来。(一直报错django.core.exceptions.ImproperlyConfigured: Requested setting INSTALLED_APPS, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.)

2.6 将Django REST framework集成到Django

上边我们创建了Django项目,至于Django REST framework只是安装并没有开始操作,下边我们开始使用Django REST framework对上边的Django项目进行REST化改造。

一般而言我们不直接大幅修改Django项目的文件,而是新建一个APP实现REST,然后原来的Django项目文件只写一些包含命令即可。所谓APP可以理解为子文件夹或者一个新线程。

为了更好地证明我们的程序是能很好运行的,我这里会改用和官方例子不一样的名称包括app名称model名称等;并尽可能说明每个操作本质是在做什么。 

2.6.1 注册drest和Django REST framework

首先,进入到manage.py所在目录新建一个app(注意打开的cmd中的python和pycharm中的python同为python3不然运行就报错了,我这里直接在前边的Anaconda Prompt中运行):

python manage.py startapp drest

向Django项目注册drest,由于Django REST framework其实也以app形式注入所以也一同注册。编缉DjangoTest/settings.py找到INSTALLED_APPS追加以下内容:

'rest_framework',
'drest.apps.DrestConfig',

 2.6.2 路由关联调整等

在drest目录下新建urls.py(内容先不写),然后在DjangoTest/usrls.py中包含它;即DjangoTest/usrls.py修改如下:

from django.contrib import admin
from django.urls import path
from django.conf.urls import url, include

urlpatterns = [
  path('admin/', admin.site.urls),
  url(r'^', include('drest.urls')),
]

另外我们再在drest创建一个序列化文件serializers.py(内容先不写)用于后续序列化。到此我们的环境算搭建好了,项目目录结构如下:

三、开发示例

前边我们已搭好了环境,创建了一个app----drest,这里我们即在drest上进行开发。

3.1 创建model

这里的model不是mvc中的m,而是orm中的表对应的类,稍后数据库的表就是根据这个类来建立的。

编缉drest/model.py,写入以下内容:

from django.db import models

# Create your models here.
class Test(models.Model):
  # 这些在创建数据表时是表字段,括号内为字段对应属性
  # 不过注意default属性,是说在实例化这个类时该字段默认是这个值,创建数据表时并不会当作一行括入数据表
  created = models.DateTimeField(auto_now_add=True)
  username = models.CharField(max_length=100, default='ls', )
  password = models.CharField(max_length=100, default='toor', )

  class Meta:
    # 这个表示数据表的内容按创建时间排序
    ordering = ('created',)

3.2 创建model对应序例化类

编写drest/serializers.py写入以下内容:

from rest_framework import serializers
from drest.models import Test

class TestSerializer(serializers.ModelSerializer):
  class Meta:
    # 此处指明本序列化对应的model
    model = Test
    # 此处指明从model对应数据表中读出哪些字段
    # id字段我们在model中并没指明应该是框架自己创建的
    # 另外我们还创建了created字段,但这里我们不加读取他,当然你要读取加上即可
    fields = ('id', 'username', 'password')

3.3 设定路由

编缉drest/urls.py,写入以下内容:

from django.conf.urls import url
from drest import views

urlpatterns = [
  url(r'^test/$', views.test),
]

3.4 创建视图

在REST中视图已经不是mvc中的html与后端代码混淆的那种.jsp或.aspx页面了,所指的是生成并返回json/xml结果的东西(反而更像mvc中的m)。

在路由中我们设定链接test,指向test视图;我们这里来实现test视图,该视图使用3.2中的序列化类读取3.1中对应的数据表的所有内容实现序列化并返回。

from django.http import JsonResponse
from rest_framework.parsers import JSONParser
from drest.serializers import Test
from drest.serializers import TestSerializer

def test(request):
  """
  List all code snippets, or create a new snippet.
  """
  if request.method == 'GET':# 这里应该是model对应的所有字段
    test_obj = Test.objects.all()
    # 序列化
    serializer = TestSerializer(test_obj, many=True)
    # 返回
    return JsonResponse(serializer.data, safe=False)

  # 此框架想实现原始REST的思想,如果是post就保存到数据库,这里暂且保留虽然我觉得不实用
  elif request.method == 'POST':
    data = JSONParser().parse(request)
    serializer = TestSerializer(data=data)
    if serializer.is_valid():
      serializer.save()
      return JsonResponse(serializer.data, status=201)
    return JsonResponse(serializer.errors, status=400)

在没有if代码对get/post等方法都进行同样的响应,如果要区分那就在在如if request.method == 'POST':分支内编写响应代码即可。为方便post测试附上requests和curl post提交的形式。

requests post提交json:

import requests

url = "http://127.0.0.1:8000/test1/"
data = {"username":"ls", "password":"toor"}
requests.post(url,json=data)

curl post提交json:

curl -H "Content-Type:application/json" -X POST --data '{"username": "ls","password":"toor"}' http://127.0.0.1:8000/test1/

3.5 创建model对应数据表

我们在3.1中就建好了model,在官方文档中都是建好model就建对应数据表的,但是由于我对实现步骤做了调整如果在3.1中就建表,会因程序有错误而创建失败,所以我们只能到这里才创建类据表。

指示在数据库中创建model对应的表,进入到manage.py目录执行以下命令:

python manage.py makemigrations drest
python manage.py migrate

执行完成后在manage.py同级目录下可以看到一个db.sqlite3文件,该文件是一个sqlite3数据库。

使用SQLiteStudio等工具打开,可以看到有一个dres_test的表其字段“created”、“username”、“password”正是我们在model中配置好的。

3.6 向drest_test表插入数据

我们一直说TestSerializer的作用是读取drest_test表的所有内容并序列化,在上一步中我们创建好了drest_test;但是我们在model的注释中也说过创建数据表时不会向表中插入数据,也就是说此时drest_test表虽创建好了但其是一个空表是没数据的,此时如果我们运行程序并访问test链接那返回是空值。所以我们要向drest_test表中插入数据。

进入到manage.py目录执行以下命令启动shell:

python manage.py shell

为了更好地说明model中default的作用我们插入两条数据:

from drest.models import Test
from drest.serializers import TestSerializer
from rest_framework.renderers import JSONRenderer
from rest_framework.parsers import JSONParser

test = Test()
test.save()
test = Test(username='root')
test.save()

此时查看drest_test表的内容,如下所示正是我们插入的两条数据:

3.7 启动程序并访问

我们前面说过运行django项目run的一定要是我们2.5中设置的运行环境,现在虽加项目进行了如些复杂的操作但项目还是django项目还是要运行那个环境(名为django)。

pycharm切换到manage.py----在其上右键----选择Run ‘django',程序成功运行如下:

 我们看到监听地址为http://127.0.0.1:8000/,而我们设置的路由是test

打开浏览器访问http://127.0.0.1:8000/test,结果如下图,返回结果与预期完全一致: 

四、更直接的restful方法

上一大节的示例依据官方示例整理而成,整个流程虽然还算清楚,但给人一种复杂感。

比如为什么一定要我创建model、为什么一定要我创建model序列化类、为什么一定要创建数据表、为什么一定要向数据表中插入数据----总而言之,为什么一定要涉及数据库?

并非所有请求都要涉及数据库的,或者我就只想一个请求过来然后直接简单地返回随便一个数,那该如何写呢。以test1请求为例。

4.1 设定路由

编缉drest/urls.py,写入以下内容:

from django.conf.urls import url
from drest import views

urlpatterns = [
  url(r'^test1/$', views.test1),
]

4.2 创建视图

编缉drest/views.py追加test1方法:

def test1(request):
  # 要获取客户端提交的参数,可通过request.GET["param_name"]或request.POST["param_name"]获取,param_name是要获取的参数名
  # 但要另外注意对post提交django默认是有csrf token校验的,要注意怎么处理好,最简单的方法是到setting.py中将'django.middleware.csrf.CsrfViewMiddleware'项注释掉
  # username = request.GET["username"]
  # username = request.POST["username"]
  # 如果前端通过json格式提交,那么需要使用以下方式获取参数
  # data = JSONParser().parse(request)
  # username = data["username"]
  # Django执行sql语句,第一种方法是依赖model的model.objects.get()等方法
  # 获取第一条记录
  # Test.objects.get(username="ls")
  # 获取记录集合
  # Test.objects.filter(username="ls")
  # Django执行sql语句,第二种方法是直接执行sql语句
  # cursor = connection.cursor()
  # cursor.execute('select * from drest_test')
  # 获取第一条记录
  # row = cursor.fetchone()
  # 遍历数据表所有记录
  # for row in cursor.fetchall():
  #   print(f"{row}")
  dict1 = {}
  dict1["id"] = 1
  dict1["result"] = "success"
  # JsonResponse()最正规的就是给他传一个字典
  # 上一节传的serializer.data是一个列表反而不那么正规,传非字典参数要设置safe=False
  return JsonResponse(dict1)

4.3 启动程序并访问

和3.7一样运行manage.py,然后访问http://127.0.0.1:8000/test1/,结果如下图。

五、使用总结

在第三大节上,网上现有的很多教和感觉就是自己把英文版翻译成中文,但又不能很好地解框架到底在做什么,尤其是model其实是用来创建数据表和序列化类本质是读取数据表的内容并返回这两点,导致翻译得似是而非反而让人更难理解框架的本质。

如第四大节所言,我们写程序工作总不会都是读取数据库表然后返回。增删改查尤其是跨数据表的增删改查还是得在dao层中另行实现,作为窜联的逻辑代码则在view上实现;view调用dao,dao调用model。

更多关于 Django framework 相关教程请点击下面的相关链接

(0)

相关推荐

  • Django在pycharm下修改默认启动端口的方法

    如题,度娘前几条答案说的都不清不楚,俺来补上: 点击下拉选项中的Edit Configuration进入如下界面: 如果左侧没有出现django server,说明您的项目是不django,或者说还没有创建出可运行的manage.py文件,所以请想创建一个(创建方法略). 然后在右侧的port就能修改默认端口了,如上图我的默认端口是8000. Done.

  • 在Pycharm中调试Django项目程序的操作方法

    最近利用Django开发了一个小网站,但是遇到问题无法调试.查阅资料找到如下方法配置Pycharm对Django进行调试 步骤如下: 1 首先在Pycharm中打开你的Django项目,点击上面编辑栏上的run->Edit Configurations 如下图1: 2 在打开的窗口中,把Defaults的+号打开,点击Python.然后在出现的右侧窗口中输入以下数据: Script: manage.py Script Parameters: runserver .输入完毕后右下角点击Apply按

  • Pycharm 操作Django Model的简单运用方法

    Django中的Models 是什么? 通常一个Model对应数据库的一张数据表, Django中Models以类似的形式表现, 它包含了一些基本字段以及数据的一些行为 在Django工程 app 模块中有models.py, 输入 from django.db import models # Create your models here. class Person(models.Model): name = models.CharField(max_length=30) age = mode

  • 使用PyCharm创建Django项目及基本配置详解

    pycharm是个很不错的python开发工具,大大缩短了python项目的创建时间以及调试时间 在使用python写脚本一段时间后,想尝试使用Django来编写一个python项目,现做以下记录备忘: 1.创建项目 如果本地没有安装与所选python版本对应Django版本,pycharm会自动下载相应的版本: 创建后运行项目,默认页面为http://127.0.0.1:8000/,打开后: 出现上面的页面,则正面项目创建成功 目录结构: 2.创建APP 在Django项目中可以包含多个APP

  • Pycharm 创建 Django admin 用户名和密码的实例

    1. 问题 使用PyCharm 创建完Django 项目 想登录admin 页面 却不知道用户名和密码. 用的默认sqlit 2.解决办法 2.1 打开manage.py 控制界面 2.2 初始化数据库表 manage.py@HelloDj > makemigrations manage.py@HelloDj > migrate 2.3 创建admin user manage.py@HelloDj >createsuperuser 输入用户..密码.. http://127.0.0.1:

  • pycharm 将django中多个app放到同个文件夹apps的处理方法

    在django中需要创建多个app,这个就需要创建一个apps文件,把所有的app放到同个文件夹,这个比较清楚,看起来也比较规范 首先在项目文件右击-–new–python package创建一个apps文件,把所有的app拖入到apps, 弹出对话框把search for references和open moved files in editor不勾选,点击确认,这个时候运行点击run,会出现运行错误 in check_apps_ready raise AppRegistryNotReady(

  • 使用PyCharm配合部署Python的Django框架的配置纪实

    安装软件 安装 Python 2.7.PyCharm.pip(Python包管理工具).Django ( pip install Django) 部署 PyCharm 新建Django工程 完成后,其目录如下: 子目录MyDjangoProject下表示工程的全局配置,分别为setttings.py.urls.py和wsgi.py,其中setttings.py包括了系统的数据库配置.应用配置和其他配置,urls.py则 表示web工程Url映射的配置. 子目录student则是在该工程下创建的a

  • Python、 Pycharm、Django安装详细教程(图文)

    最近做项目要用到python,那么不用说就得先配置好python环境 以及选择好python工具.接下来分享自己的安装过程. (一).Python的安装 1.先进入官网下载python版本,https://www.python.org/downloads/ 2.下载完成后双击.exe文件进行安装,可以自定义安装,也可以默认安装,我选择的是自定义安装,注意:我这里是选择自动生成环境变量,所以我把Add Python3.6 to Path勾选上了. 3.默认安装,Next 4.选择自定义安装路径 5

  • Windows下pycharm创建Django 项目(虚拟环境)过程解析

    1. 背景 我在 Windows 下的 pycharm 直接创建 全新 Django 项目 会 pip 和其他报错 ,暂时解决不了,另外后续的多个项目只需要一套python 环境, 所以可以 利用 virtualenv 创建一个 虚拟环境,pycharm 创建的 Django 项目 在选择解释器的时候 选择虚拟环境的解释器. 2. virtualenv 安装 https://www.jb51.net/article/170070.htm 在 虚拟环境里面 安装 Django 版本 1.11.24

  • Pycharm+django2.2+python3.6+MySQL实现简单的考试报名系统

    1 准备工作 1.1 环境搭建 1.1.1 安装python3.6 python安装官网 1.1.2 安装django2.2 pip install django(==2.2.0) //不加版本默认安装最新版 1.1.3 安装pycharm(社区版,官网下载安装即可) 在安装完成后要配置好需要的第三方库:(pip下载,推荐在pycharm下也配置虚拟环境) Django2.2 连接mysql需要的库:PyMySQL, mysql, mysqlclinet 验证码用到的库:django-simpl

  • pycharm+django创建一个搜索网页实例代码

    本文主要研究的是pycharm+django创建一个搜索网页的实例代码,具体步骤和代码示例如下. 创建工程 比如,我创建的工程目录结构如下: 命令行 进入windows命令行,进入根目录: python manage.py startapp django_web 接着你会在pycharm中发现,多了一个django_web文件夹.如下将截图: 创建一个test.html <!DOCTYPE html> <html> <head> <title>开始搜索<

  • 图文详解Django使用Pycharm连接MySQL数据库

    在 Pycharm 的右上方找到 Database 点击 依次点击,选择 MySQL 数据库 点击 Download 下载驱动文件 下载完成后对数据库的相关信息进行填写 填写完成后点击"Test Connection",如果出现 Successful 就说明连接成功 然后点击"应用",再点击"确定" 左边这个窗口是写 SQL 语句的地方 例如查询 app01_admin 表 点击这个绿色三角形执行 如果要添加数据的话 点这个加号 填写内容,填写完

  • PyCharm 创建指定版本的 Django(超详图解教程)

    最近在学习胡阳老师(the5fire)的<Django企业级开发实战>,想要使用pycharm创建django项目时,在使用virtualenv创建虚拟环境后,在pycharm内,无论如何都无法导入正确的环境.通常是提示 django is not importable in this environment.研究许久,现把 PyCharm 创建指定版本的 Django 的方法记录如下. 我的环境:1. pycharm2018.3.5 64位 professional 2. python 3.

  • python+Django+pycharm+mysql 搭建首个web项目详解

    本文实例讲述了python+Django+pycharm+mysql 搭建首个web项目.分享给大家供大家参考,具体如下: 前面的文章记录了环境搭建的过程,本节记录首个web项目调试 首先检查安装的模块,输入dos命令 pip list, 会显示已安装的模块,看是否有Django,PyMySQL模块 C:\Users\Administrator\PycharmProjects>pip list DEPRECATION: The default format will switch to colu

  • Django1.7+python 2.78+pycharm配置mysql数据库教程

    配置好virtualenv 和virtualenvwrapper后,使用pycharm创建新项目.之后要面临的问题就来了,之前一直使用的是sqlite作为开发数据库进行学习,按照之前看教程的原则,好像就是说开发环境要和生产环境尽量的一致,所以现在想尝试一下使用更有可能在生产环境部署的mysql数据库进行开发. 本觉得是一件应该很轻松的事情,没想到遇到了一些麻烦 根据一通百度,搜出来的方案大概有: MySQLdb mysql安装时候自带的connector pymysql MySQLdb 是dja

  • Django代码性能优化与Pycharm Profile使用详解

    前言 pycharm是python的一个商业的集成开发工具,本人感觉做python开发还是很好用的,django是一个很流行的python web开源框架,本文将通过实例代码给大家介绍了关于Django代码性能优化与Pycharm Profile使用的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 是一段导出数据月报的脚本,原先需要十几秒,优化后只需要1秒多. Pycharm Profile 优化第一步就是Profile,先看看慢在哪里.Pycharm自带Profile

  • python使用Pycharm创建一个Django项目

    本文为Django项目创建的简单介绍,更为详细的Django项目创建,可以参考如下教程: Django入门与实践-//www.jb51.net/article/64109.htm Pycharm 版本: Professional 2017.1 Django 版本: 1.8.7 在软件安装和环境配置完成后,打开Pycharm. Step 1. 点击 File --> New Project 弹出如下窗口: 图中编号1处为项目位置:编号2处为使用的模板语言类型,默认为Django模板语言:编号3处是

随机推荐