电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

django使用graphql的實例

瀏覽:137日期:2024-09-22 15:46:52

一、開發環境

1、python3.6

2、django2.0

3、window10

二、項目搭建

1、創建一個虛擬空間mkvirtualenv 空間名

2、創建一個django項目

3、安裝graphql的依賴包

pip install graphene-django

4、創建一個組件blog

5、把組件blog及graphene_django注入到app中

6、在settings.py中配置mysql數據庫連接

三、書寫blog的內容

1、在models.py中寫上數據模型

from django.db import models# Create your models here.class User(models.Model): name = models.CharField(max_length=100, verbose_name='博主名字') gender = models.CharField(max_length=6, choices=((’male’, u’男’), (’female’, ’女’)), default=’female’,verbose_name=’性別’) create_at = models.DateTimeField(auto_now_add=True, verbose_name=’創建時間’)class Blog(models.Model): title = models.CharField(max_length=100, verbose_name=’標題’) user = models.ForeignKey(User, null=True, blank=True, on_delete=models.SET_NULL, verbose_name=’博主名字’) content = models.TextField(verbose_name=’博客內容’) create_at = models.DateTimeField(auto_now_add=True, verbose_name=’創建時間’) update_at = models.DateTimeField(auto_now=True, verbose_name=’更新時間’)

2、新建一個schema.py文件

#!/usr/bin/env python# encoding: utf-8import graphenefrom graphene_django.types import DjangoObjectTypefrom .models import User, Blogclass UserType(DjangoObjectType): class Meta: model = Userclass BlogType(DjangoObjectType): class Meta: model = Blog# 定義動作約素輸入類型class UserInput(graphene.InputObjectType): name = graphene.String(required=True) gender = graphene.String(required=True)class BlogInput(graphene.InputObjectType): title = graphene.String(required=True) user = graphene.Int(required=True) content = graphene.String(required=True)# 定義一個創建user的mutationclass CreateUser(graphene.Mutation): # api的輸入參數 class Arguments: user_data = UserInput(required=True) # api的響應參數 ok = graphene.Boolean() user = graphene.Field(UserType) # api的相應操作,這里是create def mutate(self, info, user_data): user = User.objects.create(name=user_data[’name’], gender=user_data[’gender’]) ok = True return CreateUser(user=user, ok=ok)# 定義一個創建博客的mutationclass CreateBlog(graphene.Mutation): class Arguments: blog_data = BlogInput(required=True) blog = graphene.Field(BlogType) def mutate(self, info, blog_data): # 插入到數據庫中 blog = Blog.objects.create(title=blog_data[’title’], user_id=blog_data[’user’], content=blog_data[’content’]) return CreateBlog(blog=blog)# 定義一個查詢語句class Query(object): all_user = graphene.List(UserType) all_blog = graphene.List(BlogType) def resolve_all_user(self, info, **kwargs): # 查詢所有book的邏輯 return User.objects.all() def resolve_all_blog(self, info, **kwargs): # 查詢所有title的邏輯 return Blog.objects.all()

3、在跟目錄(和settings.py同級)創建一個項目的總schema.py

import grapheneimport book.schema, blog.schemaclass Query(blog.schema.Query, graphene.ObjectType): # 總的Schema的query入口 passclass Mutations(graphene.ObjectType): # 總的Schema的mutations入口 create_user = blog.schema.CreateUser.Field() create_blog = blog.schema.CreateBlog.Field()schema = graphene.Schema(query=Query, mutation=Mutations)

4、配置url地址

from django.contrib import adminfrom django.urls import pathfrom graphene_django.views import GraphQLViewfrom .schema import schemaurlpatterns = [ path(’admin/’, admin.site.urls), path(’graphql/’, GraphQLView.as_view(graphiql=True, schema=schema)),]

5、生成數據庫映射及啟動項目,直接在瀏覽器上訪問

四、可以對上面的代碼調整

1、把Mutations也單獨定義在各自的schema.py中

# 定義一個總的mutation出口class Mutation(graphene.AbstractType): create_user = CreateUser.Field() create_blog = CreateBlog.Field()

2、在總的schema.py中引入類型Query一樣的操作

class Mutations(blog.schema.Mutation, graphene.ObjectType): # 總的Schema的mutations入口 pass

3、輸入數據類型可以直接定義在mutation里面

class CreateUser(graphene.Mutation): # api的輸入參數(類名可以隨便定義) class Arguments: name = graphene.String(required=True) gender = graphene.String(required=True) # api的響應參數 ok = graphene.Boolean() user = graphene.Field(UserType) # api的相應操作,這里是create def mutate(self, info, name, gender): user = User.objects.create(name=name, gender=gender) ok = True return CreateUser(user=user, ok=ok)

五、Query語句中使用條件查詢

1、app的schema(官方案例)

import graphenefrom graphene_django.types import DjangoObjectTypefrom .models import Category, Ingredientclass CategoryType(DjangoObjectType): class Meta: model = Categoryclass IngredientType(DjangoObjectType): class Meta: model = Ingredient# 定義一個查詢class Query(object): # 定義一個根據id或者name查詢的 category = graphene.Field(CategoryType,id=graphene.Int(),name=graphene.String()) # 查詢全部的 all_categories = graphene.List(CategoryType) # 根據條件查詢 ingredient = graphene.Field(IngredientType,id=graphene.Int(),name=graphene.String()) # 查詢全部的 all_ingredients = graphene.List(IngredientType) def resolve_all_categories(self, info, **kwargs): return Category.objects.all() def resolve_all_ingredients(self, info, **kwargs): # We can easily optimize query count in the resolve method return Ingredient.objects.select_related(’category’).all() # 定義查詢語句 def resolve_category(self, info, **kwargs): id = kwargs.get(’id’) name = kwargs.get(’name’) if id is not None: return Category.objects.get(pk=id) if name is not None: return Category.objects.get(name=name) return None def resolve_ingredient(self, info, **kwargs): id = kwargs.get(’id’) name = kwargs.get(’name’) if id is not None: return Ingredient.objects.get(pk=id) if name is not None: return Ingredient.objects.get(name=name) return None

官網地址

補充知識:記錄下python中使用定時器的幾種方法

方式一、直接使用while循環的方式

from datetime import datetimeimport time# 每n秒執行一次def timer(n): while True: print(datetime.now().strftime('%Y-%m-%d %H:%M:%S')) time.sleep(n)timer(5)

方式二、使用threading模塊中的Timer

from datetime import datetimefrom threading import Timer# 打印時間函數def print_time(inc): print(datetime.now().strftime('%Y-%m-%d %H:%M:%S')) ''' Timer的參數說明 inc:表示時間間隔 print_time:執行的函數 (inc,):傳遞給執行函數的參數 ''' t = Timer(inc, print_time, (inc,)) t.start()print_time(2)

方式三、使用sched模塊

import timeimport schedfrom datetime import datetime# 初始化 sched 模塊的 scheduler 類# 第一個參數是一個可以返回時間戳的函數,第二個參數可以在定時未到達之前阻塞。schedule = sched.scheduler(time.time, time.sleep)# 被周期性調度觸發的函數def print_time(inc): print(datetime.now().strftime('%Y-%m-%d %H:%M:%S')) schedule.enter(inc, 0, print_time, (inc,))# 默認參數 60 sdef start(inc=60): # enter四個參數分別為:間隔事件、優先級(用于同時間到達的兩個事件同時執行時定序)、被調用觸發的函數、給觸發函數的參數(tuple形式) schedule.enter(0, 0, print_time, (inc,)) schedule.run()if __name__ == '__main__': start(10)

方式四、使用apscheduler

from apscheduler.schedulers.blocking import BlockingSchedulerfrom datetime import datetimedef job(): print(datetime.now().strftime(’%Y-%m-%d %H:%M:%S’))if __name__ == '__main__': scheduler = BlockingScheduler() scheduler.add_job(job, ’interval’, seconds=5) scheduler.start()

以上這篇django使用graphql的實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Django
相關文章:
主站蜘蛛池模板: 课件导航网_ppt课件_课件模板_课件下载_最新课件资源分享发布平台 | 掺铥光纤放大器-C/L波段光纤放大器-小信号光纤放大器-合肥脉锐光电技术有限公司 | 西安耀程造价培训机构_工程预算实训_广联达实作实操培训 | 顺辉瓷砖-大国品牌-中国顺辉 | 卫生纸复卷机|抽纸机|卫生纸加工设备|做卫生纸机器|小型卫生纸加工需要什么设备|卫生纸机器设备多少钱一台|许昌恒源纸品机械有限公司 | 诺冠气动元件,诺冠电磁阀,海隆防爆阀,norgren气缸-山东锦隆自动化科技有限公司 | 磁力抛光机_磁力研磨机_磁力去毛刺机-冠古设备厂家|维修|租赁【官网】 | 浙江建筑资质代办_二级房建_市政_电力_安许_劳务资质办理公司 | 悬浮拼装地板_篮球场木地板翻新_运动木地板价格-上海越禾运动地板厂家 | 临海涌泉蜜桔官网|涌泉蜜桔微商批发代理|涌泉蜜桔供应链|涌泉蜜桔一件代发 | 陶氏道康宁消泡剂_瓦克消泡剂_蓝星_海明斯德谦_广百进口消泡剂 | 防火门|抗爆门|超大门|医疗门|隔声门-上海加汇门业生产厂家 | 高低温万能试验机-复合材料万能试验机-馥勒仪器 | 酒店品牌设计-酒店vi设计-酒店标识设计【国际级】VI策划公司 | 一体化预制泵站-一体化提升泵站-一体化泵站厂家-山东康威环保 | 河南彩印编织袋,郑州饲料编织袋定制,肥料编织袋加工厂-盛军塑业 河南凯邦机械制造有限公司 | 首页-瓜尔胶系列-化工单体系列-油田压裂助剂-瓜尔胶厂家-山东广浦生物科技有限公司 | 蔬菜清洗机_环速洗菜机_异物去除清洗机_蔬菜清洗机_商用洗菜机 - 环速科技有限公司 | 太空舱_民宿太空舱厂家_移动房屋太空舱价格-豪品建筑 | 丹佛斯变频器-丹佛斯压力开关-变送器-广州市风华机电设备有限公司 | 纸箱网 -纸箱机械|设备|包装纸盒|包装印刷行业门户网站 | 浙江华锤电器有限公司_地磅称重设备_防作弊地磅_浙江地磅售后维修_无人值守扫码过磅系统_浙江源头地磅厂家_浙江工厂直营地磅 | 威实软件_软件定制开发_OA_OA办公系统_OA系统_办公自动化软件 | 刚性-柔性防水套管-橡胶伸缩接头-波纹管补偿器-启腾供水材料有限公司 | 12cr1mov无缝钢管切割-15crmog无缝钢管切割-40cr无缝钢管切割-42crmo无缝钢管切割-Q345B无缝钢管切割-45#无缝钢管切割 - 聊城宽达钢管有限公司 | 土壤水分自动监测站-SM150便携式土壤水分仪-铭奥仪器 | 广州冷却塔维修厂家_冷却塔修理_凉水塔风机电机填料抢修-广东康明节能空调有限公司 | 活性炭-果壳木质煤质柱状粉状蜂窝活性炭厂家价格多少钱 | 999范文网_优质范文下载写作帮手 | 预制直埋蒸汽保温管-直埋管道-聚氨酯发泡保温管厂家 - 唐山市吉祥保温工贸有限公司 | 辐射色度计-字符亮度测试-反射式膜厚仪-苏州瑞格谱光电科技有限公司 | 直齿驱动-新型回转驱动和回转支承解决方案提供商-不二传动 | 北京晚会活动策划|北京节目录制后期剪辑|北京演播厅出租租赁-北京龙视星光文化传媒有限公司 | 纯化水设备-纯水设备-超纯水设备-[大鹏水处理]纯水设备一站式服务商-东莞市大鹏水处理科技有限公司 | 行星齿轮减速机,减速机厂家,山东减速机-淄博兴江机械制造 | 仿古建筑设计-仿古建筑施工-仿古建筑公司-汉匠古建筑设计院 | 北京发电机出租_发电机租赁_北京发电机维修 - 河北腾伦发电机出租 | 防爆正压柜厂家_防爆配电箱_防爆控制箱_防爆空调_-盛通防爆 | 低气压试验箱_高低温低气压试验箱_低气压实验箱 |林频试验设备品牌 | 消防泵-XBD单级卧式/立式消防泵-上海塑泉泵阀(集团)有限公司 | 电动垃圾车,垃圾清运车-江苏速利达机车有限公司 |