Django+Vue项⽬学习第⼀篇:django后台搭建
传送门:
最近在学习Django和Vue,经过⼀段时间的摸索终于把前后端调通了,初步达到了学习的⽬的:
1、使⽤Vue写前端页⾯;
2、使⽤Django处理后台逻辑,⽣成数据返给前端;
4、Django如何接收不同类型请求头对应的请求参数,例如表单数据、json数据;
5、解决Vue+Django的跨域问题;
6、解决Vue+Django发送post请求时的CSRF验证问题;
我会⽤⼏篇博客来完整地说⼀下项⽬的搭建过程,包含前端Vue⼯程以及后端Django⼯程,虽然实现的功能很简单,但是却能够很好地学习到Django+Vue联调项⽬的基础知识
ps.⽂中的代码可能有些low,不要在意,重点关注前后端是怎么调通的,这也是我学习它的初衷,等后⾯随着代码能⼒的提⾼,相信可以写出更漂亮的代码~
为了便于理解,本次仍然以我之前写过的⼀个web数据构造平台为基础,复刻它的功能,传送门:、
ok,下⾯开始第⼀篇:利⽤Django搭建后端⼯程
1、查看python、django版本
何姿个人资料windows下切换⾄cmd窗⼝
查看python版本
用醋洗脸的好处C:\Users\HanMK\Desktop>python --version
Python 3.7.2
查看django版本
C:\Users\HanMK\Desktop>python -m django --version
2.2.1
2、创建项⽬
cd 到⼀个你想放置你代码的⽬录,然后运⾏以下命令
C:\Users\HanMK\Desktop>django-admin startproject mysite
将会在当前⽬录下创建⼀个 mysite ⽬录,结构如下
mysite/
manage.py
mysite/
__init__.py
settings.py
urls.py
asgi.py
3、启动服务
⾸先切换到外层的mysite⽬录,即项⽬的根⽬录 mysite/
然后执⾏ python manage.py runserver
C:\Users\HanMK\Desktop\mysite>python manage.py runserver
Watching for file changes with StatReloader
Performing
System check identified no issues (0 silenced).
You have 17 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions. Run 'python manage.py migrate' to apply them.
March 23, 2020 - 11:53:58
Django version 2.2.1, using settings 'mysite.settings'
Starting development server at 127.0.0.1:8000/
Quit the server with CTRL-BREAK.
更换端⼝:
$ python manage.py runserver 8080
更改监听所有服务器的公开IP
$ python manage.py runserver 0:8000
4、创建应⽤
在 Django 中,每⼀个应⽤都是⼀个 Python 包,并且遵循着相同的约定。
进⼊ manage.py 所在的⽬录下,然后运⾏这⾏命令来创建⼀个 create_data 应⽤:
C:\Users\HanMK\Desktop\mysite>python manage.py startapp create_data
这将会创建⼀个 create_data ⽬录,它的⽬录结构⼤致如下:
create_data/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
views.py
注册应⽤,打开settings.py,到 INSTALLED_APPS,在⾥⾯添加 create_data
5、创建视图
因为功能⽐较简单,所以我的业务处理逻辑直接在视图⽂件中编写了
from django.shortcuts import render
from django.http import HttpResponse, JsonResponse, HttpResponseRedirect
from django.views.decorators.http import require_http_methods
import faker, json
from django.middleware.csrf import get_token
# Create your views here.
fake = faker.Faker(locale='zh_CN') # 初始化,指定⽣成中⽂格式数据def create_phone():
phones = [fake.phone_number() for _ in range(5)] # 列表推导,把⽣成的数据组成⼀个列表
return"".join(phones)
def phone(request):
data = create_phone()
return HttpResponse(data)
def create_id(num):
"""⽣成⾝份证"""
identity_ids = [fake.ssn() for i in range(int(num))]
return"".join(identity_ids)
@require_http_methods(['GET', 'POST'])
def id(request):
num = ("num") # 如果"Content-type"="application/x-www-form-urlencoded"
# num = json.loads(request.body).get("num") # 如果"Content-type"="application/json"
print(num)
if num == ""or num is None:
data1 = create_id(5)
else:
data1 = create_id(num)
return HttpResponse(data1)
def create_name(num):
"""⽣成姓名"""
names = [fake.name() for i in range(int(num))]
return"".join(names)
def name(request):
num = ("num")
print(num)
if num == ""or num is None:
data = create_name(20)
else:
data = create_name(num)
return HttpResponse(data)
注意:上述代码中id()视图⽅法和name()⽅法中,分别预留了⼀个参数num,是需要从前端请求中获取的,这⾥我们先定义出来,后续写前端页⾯时,需要从页⾯输⼊num参数传递给后端
6、配置路由
创建好视图⽅法后,需要给视图配置路由,这样其他⼈才能通过url调⽤这个⽅法
关于django的路由配置,我以前写过⼀篇关于如何理解它的⽂章,有兴趣可以看看,传送门:
在 create_data ⽬录⾥新建⼀个 urls.py ⽂件,你的应⽤⽬录现在看起来应该是这样:哪种美白产品最好
create_data/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
urls.py
views.py
在 create_data/urls.py 中,输⼊如下代码:
# author: hmk
from django.urls import path
from . import views
urlpatterns = [
path('', views.main, name='main'),
path('phone', views.phone, name='phone'),
path('id', views.id,name='id'),
高以翔遗照曝光path('name', views.name,name='name'),
]
下⼀步是要在根 URLconf ⽂件中指定我们创建的 create_data.urls 模块。
在 mysite/urls.py ⽂件的 urlpatterns 列表⾥插⼊⼀个 include(),如下:
"""mysite URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:
docs.djangoproject/en/2.2/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
ib import admin
from django.urls import path, include
好看的爱情片
urlpatterns = [
path('polls-admin/', admin.site.urls),
path('polls/', include('polls.urls')),
path('create_data/', include('create_data.urls')), # 指定create_data.urls模块
]
因为浏览器访问⼀个接⼝时,默认都是发get请求,如果你的视图允许⽤get访问,则可以得到结果如果想限制请求⽅法,可以通过如下⽅法实现
from django.views.decorators.http import require_http_methods
@require_http_methods(['POST'])
def phone(request):
data = create_phone()
return HttpResponse(data)
这个时候再访问,则提⽰ “Method Not Allowed”老六是个什么梗
django后端部分基本上写好了,接下来写前端
发布评论