成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

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

django使用graphql的實例

瀏覽:203日期: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
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
中文在线一区二区 | 中文字幕一区二区不卡| 久久国产剧场电影| 国产女优一区| 亚洲欧美另类久久久精品| 91丨九色丨蝌蚪富婆spa| 日韩女同互慰一区二区| 国产一区二三区| 欧美亚洲一区三区| 天堂va蜜桃一区二区三区漫画版| 国产精品一区毛片| 亚洲蜜臀av乱码久久精品| 精品96久久久久久中文字幕无| 国产欧美精品区一区二区三区| 亚洲高清久久久| 国产乱码精品| 伊人一区二区三区| 亚洲人成高清| 亚洲欧洲一区二区三区| 国一区二区在线观看| 欧美性大战久久久久久久| 日本美女一区二区三区视频| 日本伦理一区二区| 麻豆91在线观看| 欧美三级欧美一级| 极品尤物av久久免费看| 欧美午夜精品免费| 精品亚洲国内自在自线福利| 欧美综合久久久| 久久精品国产亚洲高清剧情介绍 | 久久成人亚洲| 亚洲高清三级视频| 性欧美videos另类喷潮| 天堂影院一区二区| 色婷婷综合久色| 久久国产精品无码网站| 91精品国产欧美一区二区成人 | 亚洲成人综合视频| 色婷婷av一区| 经典三级视频一区| 538在线一区二区精品国产| 久久黄色级2电影| 欧美午夜精品电影| 国产精品911| 欧美大片在线观看一区二区| 91在线视频观看| 国产精品久久久久久久久晋中| 国产精品成人一区二区网站软件| 日韩美女视频一区二区| 亚洲欧美成人综合| 精品一区二区影视| 精品国内二区三区| 黄色av一区| 亚洲综合久久久久| 久久久久久久高潮| 久久精品国产999大香线蕉| 欧美一区二区三区男人的天堂| 成人一级视频在线观看| 国产精品网站在线观看| 欧美亚洲一区二区三区| 极品瑜伽女神91| 国产日韩欧美精品一区| 亚洲精品一二| 六月丁香综合在线视频| 日韩欧美激情四射| 国色天香一区二区| 亚洲成av人片在线| 91精品国产综合久久久蜜臀粉嫩| 99久久精品国产网站| 亚洲视频一区二区在线观看| 久久免费一区| 成人一级片在线观看| 18成人在线观看| 91久久精品日日躁夜夜躁欧美| 国产大陆精品国产| 中文字幕一区二区三区不卡| 天涯成人国产亚洲精品一区av| 欧美日韩高清免费| 亚洲成人一区在线| 欧美一级在线免费| 亚洲午夜视频| 麻豆国产精品777777在线| 久久婷婷久久一区二区三区| 99国产精品99久久久久久粉嫩| 美女精品一区二区| 久久精品日韩一区二区三区| 亚洲婷婷综合久久一本伊一区| 色综合久久精品| 91无套直看片红桃| 亚洲无人区一区| 日韩手机在线导航| 99精品福利视频| 丁香激情综合五月| 亚洲在线中文字幕| 日韩欧美黄色影院| 亚洲永久免费精品| 99久久99久久综合| 日韩精品电影在线| 久久奇米777| 色视频一区二区| 99国产精品国产精品毛片| 午夜欧美在线一二页| 欧美一级欧美三级在线观看 | 国产精品欧美一区二区三区| 91久久香蕉国产日韩欧美9色| 午夜国产欧美理论在线播放 | 国产日韩1区 | 欧美一级久久| 91丨九色丨尤物| 美国十次了思思久久精品导航| 久久色中文字幕| 久久综合精品一区| 午夜亚洲福利| 精品一区二区精品| 一区二区三区四区不卡在线 | 奇米777欧美一区二区| 亚洲国产精品成人综合色在线婷婷 | 精品国产一区二区三区av性色| 免费欧美在线| 91免费观看国产| 久久精品国产99国产精品| 亚洲欧美视频在线观看视频| 欧美电视剧在线观看完整版| 日本高清免费不卡视频| 亚洲一二区在线| 国产成人在线观看| 午夜精品影院在线观看| 中文av一区二区| 日韩一区二区高清| 日本韩国视频一区二区| 在线观看视频免费一区二区三区| 国产成人在线视频网站| 日韩精品一二三四| 亚洲欧美日韩一区二区三区在线观看| 日韩欧美高清一区| 在线观看国产日韩| 在线亚洲精品| 农村妇女精品| 粉嫩av亚洲一区二区图片| 日本vs亚洲vs韩国一区三区 | 亚洲女同ⅹxx女同tv| 精品国产区一区| 精品视频在线免费看| 亚洲欧美日韩专区| 尤物精品在线| 91网站视频在线观看| 国产精品亚洲视频| 久久国产成人午夜av影院| 亚洲一区在线观看网站| 国产精品毛片无遮挡高清| 精品日本一线二线三线不卡| 欧美日韩视频在线观看一区二区三区| 宅男噜噜噜66国产日韩在线观看| 午夜视频久久久| 成人sese在线| 国产自产v一区二区三区c| 三级在线观看一区二区| 夜夜亚洲天天久久| 亚洲三级理论片| 国产精品毛片a∨一区二区三区| 久久亚洲私人国产精品va媚药| 欧美日韩不卡一区| 在线观看国产日韩| 91高清视频免费看| 色中色一区二区| 亚洲欧美成人综合| 国产精品区一区| 亚洲精品影院在线观看| 国产精品v日韩精品v欧美精品网站| 高清国产一区二区三区| 国产精品亚洲一区二区三区在线 | 红桃视频国产一区| 国产一区二区三区无遮挡| 欧美日韩成人一区二区三区| 92精品国产成人观看免费| 成人免费的视频| 成人免费视频一区二区| 成人免费视频视频在线观看免费 | 久久日韩精品一区二区五区| 欧美不卡一区二区三区四区| 日本乱人伦一区| 91成人国产精品| 欧美在线制服丝袜| 欧美日韩精品一区二区| 91精品国产综合久久香蕉麻豆| 日韩一区二区在线看片| 4438成人网| 制服丝袜在线91| 欧美一级在线观看| 26uuu色噜噜精品一区二区| 国产亚洲欧美日韩俺去了| 日本一区二区高清| 国产精品传媒视频| 亚洲一线二线三线视频| 日韩精品亚洲一区| 国产综合色在线| 成人福利视频在线看| 欧美一区综合| 亚洲三级免费| 久久国产一区二区|