栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

轻松访问Django模型:定义Django项目的路径

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

轻松访问Django模型:定义Django项目的路径

我认为主要的误解是软件包路径与设置模块路径。为了从外部脚本使用django的模型,您需要设置

DJANGO_SETTINGS_MODULE
。然后,该模块必须是
可导入的 (即,如果设置路径为
myproject.settings
,则该语句
from myproject importsettings
应在python shell中运行)。

由于django中的大多数项目都是在default之外的路径中创建的

PYTHONPATH
,因此必须将项目的路径添加到
PYTHONPATH
环境变量中。

这是一个分步指南,用于将完全正常(且最少)的Django模型集成到Scrapy项目中:

注意: 本说明在上次编辑日期生效。如果对您不起作用,请添加评论并描述您的问题以及scrapy / django版本。

  1. 项目将在

    /home/rolando/projects
    目录中创建。

  2. 启动 django项目

    $ cd ~/projects

    $ django-admin startproject myweb
    $ cd myweb
    $ ./manage.py startapp myapp

  3. 在中创建模型

    myapp/models.py

    from django.db import models

    class Person(models.Model):
    name = models.CharField(max_length=32)

  4. 添加

    myapp
    INSTALLED_APPS
    myweb/settings.py

    # at the end of settings.py

    INSTALLED_APPS += (‘myapp’,)

  5. 在中设置我的数据库设置

    myweb/settings.py

    # at the end of settings.py

    DATAbaseS[‘default’][‘ENGINE’] = ‘django.db.backends.sqlite3’
    DATAbaseS[‘default’][‘NAME’] = ‘/tmp/myweb.db’

  6. 创建数据库。

    $ ./manage.py syncdb --noinput

    Creating tables …
    Installing custom SQL …
    Installing indexes …
    Installed 0 object(s) from 0 fixture(s)

  7. 创建 scrapy项目

    $ cd ~/projects

    $ scrapy startproject mybot
    $ cd mybot

  8. 在中创建一个项目

    mybot/items.py

注意: 在较新版本的Scrapy中,您需要安装

scrapy_djangoitem
和使用
from scrapy_djangoitemimport DjangoItem

    from scrapy.contrib.djangoitem import DjangoItem    from scrapy.item import Field    from myapp.models import Person    class PersonItem(DjangoItem):        # fields for this item are automatically created from the django model        django_model = Person

最终的目录结构是这样的:

/home/rolando/projects├── mybot│   ├── mybot│   │   ├── __init__.py│   │   ├── items.py│   │   ├── pipelines.py│   │   ├── settings.py│   │   └── spiders│   │       └── __init__.py│   └── scrapy.cfg└── myweb    ├── manage.py    ├── myapp    │   ├── __init__.py    │   ├── models.py    │   ├── tests.py    │   └── views.py    └── myweb        ├── __init__.py        ├── settings.py        ├── urls.py        └── wsgi.py

从这里开始,基本上我们已经完成了在一个沙哑的项目中使用django模型所需的代码。我们可以使用

scrapyshell
命令立即对其进行测试,但是请注意所需的环境变量:

$ cd ~/projects/mybot$ PYTHonPATH=~/projects/myweb DJANGO_SETTINGS_MODULE=myweb.settings scrapy shell# ... scrapy banner, debug messages, python banner, etc.In [1]: from mybot.items import PersonItemIn [2]: i = PersonItem(name='rolando')In [3]: i.save()Out[3]: <Person: Person object>In [4]: PersonItem.django_model.objects.get(name='rolando')Out[4]: <Person: Person object>

因此,它按预期工作。

最后,您可能不需要每次运行机器人时都必须设置环境变量。尽管最好的办法是将项目的程序包实际安装在中设置的路径中,但有许多替代方法可以解决此问题

PYTHONPATH

这是最简单的解决方案之一:将这些行添加到

mybot/settings.py
文件中以设置环境变量。

# Setting up django's project full path.import syssys.path.insert(0, '/home/rolando/projects/myweb')# Setting up django's settings module name.# This module is located at /home/rolando/projects/myweb/myweb/settings.py.import osos.environ['DJANGO_SETTINGS_MODULE'] = 'myweb.settings'# Since Django 1.7, setup() call is required to populate the apps registry.import django; django.setup()

注意: 更好的方法是在两个项目中都有

setuptools
基于
setup.py
文件的文件并运行
python setup.pydevelop
,这些文件会将您的项目路径链接到python的路径中(我假设您使用
virtualenv
)。

足够了。为了完整起见,这是一个可以正常工作的项目的基本介绍和管道:

  1. 创建蜘蛛。
    $ cd ~/projects/mybot

    $ scrapy genspider -t basic example example.com

蜘蛛代码:

    # file: mybot/spiders/example.pyfrom scrapy.spider import baseSpiderfrom mybot.items import PersonItemclass ExampleSpider(baseSpider):    name = "example"    allowed_domains = ["example.com"]    start_urls = ['http://www.example.com/']    def parse(self, response):        # do stuff        return PersonItem(name='rolando')
  1. 创建一个管道
    mybot/pipelines.py
    以保存该项目。
    class MybotPipeline(object):def process_item(self, item, spider):    item.save()    return item

item.save()
如果您使用的是
DjangoItem
类,则可以在这里使用,也可以直接导入django模型并手动创建对象。两种方式的主要问题是定义环境变量,以便您可以使用django模型。

  1. 将管道设置添加到您的

    mybot/settings.py
    文件。

    ITEM_PIPELINES = {'mybot.pipelines.MybotPipeline': 1000,

    }

  2. 跑蜘蛛。

    $ scrapy crawl example


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/639856.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号