【问题标题】:Convert Django View to Python file [duplicate]将 Django View 转换为 Python 文件 [重复]
【发布时间】:2017-03-12 21:50:00
【问题描述】:

我在 django 中有以下视图,它按预期工作:

from xmlsoccer import XmlSoccer
from straightred.models import StraightredFixtureLive
    @csrf_exempt
    def updatefixtureslive(request, soccerseason, league):

        if request.user.is_authenticated():

            xmlsoccer = XmlSoccer(api_key='XYZ123ABC789', use_demo=False)
            fixtureslive = xmlsoccer.call_api(method='GetLiveScoreByLeague',
                                       league='English Premier League')

        count = 0

            for fixturelive in fixtureslive:



                if 'Id' in fixturelive.keys():

                count = count + 1       
                    fixtureLiveUpdate = StraightredFixtureLive(fixtureid_id=fixturelive['Id'],
                                                           away_team_id = fixturelive['AwayTeam_Id'],
                                                           home_team_id = fixturelive['HomeTeam_Id'],
                                                           fixturedate = fixturelive['Date'],
                                                           fixturestatus = fixturelive['Time'],
                                                           fixturematchday_id = fixturelive['Round'],
                                                           spectators = fixturelive['Spectators'],
                                                           hometeamscore = fixturelive['HomeGoals'],
                                                           awayteamscore = fixturelive['AwayGoals'],
                                                           homegoaldetails = fixturelive['HomeGoalDetails'],
                                                           awaygoaldetails = fixturelive['AwayGoalDetails'],
                                                           hometeamyellowcarddetails = fixturelive['HomeTeamYellowCardDetails'],
                                                           awayteamyellowcarddetails = fixturelive['AwayTeamYellowCardDetails'],
                                                           hometeamredcarddetails = fixturelive['HomeTeamRedCardDetails'],
                                                           awayteamredcarddetails = fixturelive['AwayTeamRedCardDetails']
                                )
                    fixtureLiveUpdate.save()

            return HttpResponse("Live games have been updated." + str(count))
        else:
            return HttpResponse("You must be logged in to update teams.")

我已经删除了所有我认为只是 django 特定的部分,并最终得到以下内容:

from xmlsoccer import XmlSoccer
from straightred.models import StraightredFixtureLive

xmlsoccer = XmlSoccer(api_key='XYZ123ABC789', use_demo=False)
fixtureslive = xmlsoccer.call_api(method='GetLiveScoreByLeague',
                                   league='English Premier League')

count = 0

for fixturelive in fixtureslive:



if 'Id' in fixturelive.keys():

    count = count + 1
    fixtureLiveUpdate = StraightredFixtureLive(fixtureid_id=fixturelive['Id'],
                                                       away_team_id = fixturelive['AwayTeam_Id'],
                                                       home_team_id = fixturelive['HomeTeam_Id'],
                                                       fixturedate = fixturelive['Date'],
                                                       fixturestatus = fixturelive['Time'],
                                                       fixturematchday_id = fixturelive['Round'],
                                                       spectators = fixturelive['Spectators'],
                                                       hometeamscore = fixturelive['HomeGoals'],
                                                       awayteamscore = fixturelive['AwayGoals'],
                                                       homegoaldetails = fixturelive['HomeGoalDetails'],
                                                       awaygoaldetails = fixturelive['AwayGoalDetails'],
                                                       hometeamyellowcarddetails = fixturelive['HomeTeamYellowCardDetails'],
                                                       awayteamyellowcarddetails = fixturelive['AwayTeamYellowCardDetails'],
                                                       hometeamredcarddetails = fixturelive['HomeTeamRedCardDetails'],
                                                       awayteamredcarddetails = fixturelive['AwayTeamRedCardDetails'])
    fixtureLiveUpdate.save()

但是,我只是收到以下错误:

bash: update_live.py: line 6: syntax error near unexpected token `('

我所追求的是寻找创建 python 文件,然后使用 crontab 在预定时间运行它。

如果有人可以就此提供任何建议,我们将不胜感激。

非常感谢,艾伦。

【问题讨论】:

  • 你做错了。您不能使用 django 组件,剥离 Django 并期望它能够工作(顺便说一下,在您的示例中,StraightredFixtureLive 是一个 Django 模型,因此您应该通过该帐户将其删除)。要从 cron 启动基于 Django 的代码,您应该将其设为 management command
  • 明白,先生,去读一读。
  • 全面的要点并了解该做什么。您能否将其作为答案,以便我接受建议。非常感谢,艾伦。
  • 用完整的答案解释比我愿意花费的时间要多,尤其是如果您了解该做什么,并且已经从建议中获得了价值。很好的实施!
  • 我的意思只是复制并粘贴您输入的内容。这是完全有道理的,将来可能会帮助某人。他们将转到绿色刻度并阅读而不是阅读 cmets 哈哈

标签: python django bash


【解决方案1】:

如果您想创建脚本,请使用您的 django 项目启动脚本:

import os
import sys
import django

#Don't forget '/' at end in path.
PATH_PROJECT = os.path.dirname('/path/to/your/project/')
sys.path.append(PATH_PROJECT) 

os.environ['DJANGO_SETTINGS_MODULE'] = 'project.settings'
django.setup()

from straightred.models import StraightredFixtureLive

## many operations.

为这个脚本添加 cronjob 之后。

【讨论】:

  • 谢谢安东,明天下班后试试这个。
猜你喜欢
  • 2021-04-01
  • 2018-06-06
  • 1970-01-01
  • 1970-01-01
  • 2020-11-24
  • 2020-07-22
  • 1970-01-01
  • 1970-01-01
  • 2020-11-15
相关资源
最近更新 更多