Django 从零开始实现简单的restful应用
来源:互联网 发布:北大生命科学院知乎 编辑:程序博客网 时间:2024/05/21 06:37
安装Django
我是在windows上安装的,之后在linux上试一下再补充上来
可以通过pip直接安装
pip install django
需要使用到mysql 数据库
pip install mysqlclient
新建项目
安装以后一般会直接加到Path里可以直接运行
django-admin.py startproject myporject
但是有时候会这样没有效果
可以将django-admin.py考到目录下
python django-admin.py startproject myproject
这样也可以
django-admin startproject myproject
文件目录
│ manage.py└─myporject settings.py urls.py wsgi.py __init__.py
settings.py保存着整个项目的各种设置,比如数据库信息,app列表等等
urls.py内存放每个功能的链接
新建APP
可以直接新建一个.py文件来实现功能
但是需要进行数据库操作时必须创建一个app来实现
新建位置在manage.py所在目录
django-admin.py startapp myapp
目录结构
├─myapp│ │ admin.py│ │ apps.py│ │ models.py│ │ tests.py│ │ views.py│ │ __init__.py│ ││ └─migrations│ __init__.py
修改settings.py
这里我使用的是mysql
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME':'test', "USER":'test', "PASSWORD":'test', 'HOST':'localhost', 'PORT': '3306', }}
将这个app加入到settings中
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'myapp',]
models.py
空文件,声明数据类
from django.db import modelsclass Test(models.Model): id = models.IntegerField(primary_key=True) name = models.CharField(max_length=20, blank=True, null=True) gender = models.CharField(max_length=1, blank=True, null=True)
这里默认的表名不是Test而是myapp_test
python manage.py migrate # 创建表结构python manage.py makemigrations myapp # 让 Django 知道我们在我们的模型有一些变更python manage.py migrate myapp # 创建表结构
可以创建新表,并更新修改
连接原来就存在的表:
from django.db import modelsclass Test(models.Model): id = models.IntegerField(primary_key=True) name = models.CharField(max_length=20, blank=True, null=True) gender = models.CharField(max_length=1, blank=True, null=True) class Meta: managed = False db_table = 'test'
这样就映射到了test表
直接通过原有的表生成models
python manage.py inspectdb > myapp/models.py
终于可以写代码了
在含有urls.py的myproject文件夹下新建testdb.py
测试应用
testdb.py:
from django.http import HttpResponsedef hello(request): return HttpResponse("Hello Django")
urls.py:
from django.conf.urls import urlfrom . import testdburlpatterns = [ url(r'hello$', testdb.hello),]
运行
python manage.py runserver #默认8000 python manage.py runserver 8080#指定端口
结果
输入localhost:8000/hello
使用Django模板
django可以直接返回一个网页给客户端,并不restful
在根目录下新建一个template文件夹
在template下新建一个hello.html
<!DOCTYPE html><h1>{{hello}}</h1>
settings.py
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [BASE_DIR+'/templates',],#修改这里为templates 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, },]
testdb.py
from django.shortcuts import renderdef hellohtml(request): context ={} context['hello'] = "hello Django emmmm" return render(request,"hello.html",context)
在urls.py中加上此函数
restful的数据写入
接收post来的json数据
from django.http import HttpResponseimport jsonfrom Testmodel.models import Testfrom django.views.decorators.csrf import csrf_exempt@csrf_exemptdef postdata(request): res = {} try: if request.method == "POST": #request.body 为byte 转换为string st = request.body.decode("utf-8") res = json.loads(st) task = { 'id':res['id'], 'name':res['name'], 'gender':res['gender'] } test1 = Test(id = task['id'],gender =task['gender'],name = task['name']) test1.save() return HttpResponse('Successed!') else: return HttpResponse("no post ok?") except Exception as e: return HttpResponse(str(e))
- import models时编译器可能报错,可能是由于这个包不在一个目录下,在settings中已经写入,django自动去寻找,无视报错信息
- 表单表格后面要有一个{% csrf_token %}的标签。csrf 全称是 Cross Site Request Forgery。这是Django提供的防止伪装提交请求的功能。POST 方法提交的表格,必须有此标签。在方法前的代码为发来的数据加上这一部分
- save()方法兼具插入和更新的功能,插入重复数据时并不会出错,此逻辑需要自己写
查询
转自菜鸟教程
# 通过objects这个模型管理器的all()获得所有数据行,相当于SQL中的SELECT * FROM list = Test.objects.all() # filter相当于SQL中的WHERE,可设置条件过滤结果 response2 = Test.objects.filter(id=1) # 获取单个对象 response3 = Test.objects.get(id=1) # 限制返回的数据 相当于 SQL 中的 OFFSET 0 LIMIT 2; Test.objects.order_by('name')[0:2] #数据排序 Test.objects.order_by("id") # 上面的方法可以连锁使用 Test.objects.filter(name="runoob").order_by("id") # 输出所有数据 for var in list: response1 += var.name + " " response = response1 return HttpResponse("<p>" + response + "</p>")
更新
test1 = Test.objects.get(id=1)test1.name = 'Google'test1.save()
删除
test1 = Test.objects.get(id=1)test1.delete()
阅读全文
0 0
- Django 从零开始实现简单的restful应用
- python Django的简单应用
- Django实现RESTful web service
- Python Django 实现restful API
- 简单实现文章添加 ---django应用
- Period(kmp简单的应用 next从零开始 )
- nodejs+Express实现Restful的web应用
- Jersey 极致简单的Restful WebService实现
- C#实现一个简单的 Restful Service
- Django 分页的简单实现
- 从零开始实现一个简单的分页
- 利用Django实现RESTful API(一)
- Django实战(15):Django实现RESTful web service
- 从零开始学习c++之程序计算的简单应用
- Django 实现简单的文件上传
- django 实现简单的插入视频
- Django - 一个简单的界面显示实现
- 用django实现一个简单的页面
- cAdvisor介绍
- Nmap7.50安装与使用
- opensuse42.2切换阿里源
- WPF UserControl事件传递
- 想学Linux,但版本太多了,如Fedora、SuSE、Redhat、Ubuntu等,不免让人眼花缭乱,那么初学者该如何选择呢?
- Django 从零开始实现简单的restful应用
- Linux使用笔记
- 小而美的 React Form 组件
- 欢迎使用CSDN-markdown编辑器
- AtCoder Beginner 073 joisino's travel(多源最短路径Floyd|DFS)
- LeetCode 169. Majority Element and LeetCode 229. Majority Element II解题报告
- Flask笔记
- 2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛(9.9)
- 【LeetCode】349. Intersection of Two Arrays