免费1号线叫神马一级

    1. <form id=SgXJcNUpX><nobr id=SgXJcNUpX></nobr></form>
      <address id=SgXJcNUpX><nobr id=SgXJcNUpX><nobr id=SgXJcNUpX></nobr></nobr></address>

      What's the approach?

      Test-First! So, before we're allowed to write any real production code, we write some tests. We start by writing some browser tests - what I call functional tests, which simulate what an actual user would see and do. We'll use Selenium, a test tool which actually opens up a real web browser, and then drives it like a real user, clicking on links and buttons, and checking what is shown on the screen. These are the tests that will tell us whether or not our application behaves the way we want it to, from the user's point of view.

      Once we've written our functional tests (which, incidentally, have forced us to think through the way our application will work, from the point of view of the user - never a bad thing...) we can start to think about how we want to implement that functionality from a technical point of view.

      Thankfully we won't have to do too much difficult thinking, because the functional tests will be our guide - what do we have to do to get the functional tests to get a bit further towards passing? How would we implement that?

      Once we've settled on the function or the class that will solve our first problem, we can write a unit test for it. Again, it forces us to think about how it will work from the outside, before we write it.

      What do we want to achieve in part 1?

      In general with TDD, whenever we want to do something, we also ask ourselves "how will I know when I've succeeded" - and the answer is usually - a test!

      So here are our objectives for this first tutorial:

      Objective How will we know we've succeeded?
      Set up Django Run the Django development server and manually browse the default "Hello World" page
      Set up the Django admin site Write our first functional test, which logs into the admin site
      Create our first model for "Poll" objects Extend our functional test to create a new Poll via the admin site. Write unit tests

      Some setup before we start

      For functional testing, we'll be using the excellent Selenium. Let's install that, and Django, and a couple of other Python modules we might need:

      pip install django
      pip install selenium
      pip install mock
      pip install unittest2 # (only if using Python 2.6)
      

      If you don't know what pip is, you'll need to find out, and install it. It's a must-have for working with Python.

      At this point, you should be able to open up a command line, and type python to get the Python interpreter running, and from in there you should be able to import django and import selenium without any errors. If any of that gives you problems, take a look at:

      Setting up our Django project

      Django structures websites as "projects", each of which can have several constituent "apps"... Ostensibly, the idea is that apps can be self-contained, so that you could use one app in several projects... Well, I've never actually seen that done, but it remains a nice way of splitting up your code.

      So let's start by creating our project, which we'll call "mysite". Django has a command-line tool for this:

      django-admin startproject mysite
      

      If you're on windows, you may need to type django-admin.py startproject mysite. If you have any problems, you can take a look at the tips on

      This will create a folder called mysite to hold your project, and another folder within that also called mysite. It will also set up a few key django files, including manage.py which will let you run some administration tools for your site, and settings.py, which will hold configuration information about your site:

      `-- mysite
          |-- manage.py
          `-- mysite
              |-- __init__.py
              |-- settings.py
              |-- urls.py
              `-- wsgi.py
      

      (NB - on Django 1.3 and earlier, ``startproject`` would only create a single ``mysite`` folder, which would contain both ``manage.py`` and ``settings.py``. This tutorial is written for 1.4 -- bleeding edge FTW! -- but if you're stuck with an earlier version, you should find most things work with a little tweaking, as long as you get yourself a hold of a LiveServerTestCase backport)

      Checking we've succeeded: running the development server

      Django comes with a built-in development server which you can fire up during development to take a peek at how things are looking. You can start it up by typing:

      cd mysite
      python manage.py runserver
      

      If you then fire up your web browser and go to , you should see something a bit like this:

      /static/images/django_it_worked_default_page.png

      There's more information about the development server here:

      Now, manual tests like the one we've just done are all very well, but in TDD they're exactly what we're tring to avoid! Our next objective is to set up an automated test.

      I did want to introduce runserver at the outset though - that way, at any point during this tutorial, if you want to check what the site actually looks like, you can always fire up the development server and have a look around

      Starting our first functional test: The Django admin site

      In this section, we're going to do several things:

      • create our first FT
      • setup our database using settings.py
      • switch on django admin
      • create an admin user account

      Let's start with the FT. In the test-driven methodology, we tend to group functionality up into bite-size chunks, and write functional tests for each one of them. You can describe the chunks of functionality as "user stories", if you like, and each user story tends to have a set of tests associated with it, and the tests track the potential behaviour of a user.

      We have to go all the way to the second page of the Django tutorial to see an actual user-visible part of the application: the Django admin site. The admin site is a really useful part of Django, which generates a UI for site administrators to manage key bits of information in your database: user accounts, permissions groups, and, in our case, polls. The admin site will let admin users create new polls, enter their descriptive text and start and end dates and so on, before they are published via the user-facing websiteke. All this stuff comes 'for free' and automatically, just using the Django admin site.

      You can find out more about the philosophy behind the admin site, including Django's background in the newspaper industry, here:

      So, our first user story is that the user should be able to log into the Django admin site using an admin username and password, and create a new poll. Here's a couple of screenshots of what the admin site looks like:

      /static/images/admin03t.png /static/images/admin05t.png

      We'll add more to this test later, but for now let's just get it to do the absolute minimum: we want the test to open up the admin site (which we want to be available via the url /admin/), and see that it "looks OK" - for this, we'll check that the page contains the words Django administration, which it does by default.

      Let's create an app for our functional tests. It's a matter of preference whether you keep your FTs in a separate app or in the same app as your source code, I like to keep them separate firstly so that FTs and unit tests are easy to run separately, and secondly because FTs are meant to test the whole application, which may well mean that a single FT uses functionality provided by several different apps.

      Run the following command:

      python manage.py startapp fts
      

      Your directory tree will now look like this:

      mysite
      |-- fts
      |   |-- __init__.py
      |   |-- models.py
      |   |-- tests.py
      |   `-- views.py
      |-- manage.py
      `-- mysite
          |-- __init__.py
          |-- settings.py
          |-- urls.py
          `-- wsgi.py
      

      Now, let's open up the fts/tests.py file (inside the fts folder), and write our first Functional test. You can delete the example test case that Django have put in there, and replace it with this:

      from django.test import LiveServerTestCase
      from selenium import webdriver
      
      class PollsTest(LiveServerTestCase):
      
          def setUp(self):
              self.browser = webdriver.Firefox()
              self.browser.implicitly_wait(3)
      
          def tearDown(self):
              self.browser.quit()
      
          def test_can_create_new_poll_via_admin_site(self):
              # Gertrude opens her web browser, and goes to the admin page
              self.browser.get(self.live_server_url + '/admin/')
      
              # She sees the familiar 'Django administration' heading
              body = self.browser.find_element_by_tag_name('body')
              self.assertIn('Django administration', body.text)
      
              # TODO: use the admin site to create a Poll
              self.fail('finish this test')
      

      mysite/fts/tests.py

      Functional tests are grouped into classes, and each test is a method inside the class. The special rule is that test methods must begin with a test_.

      Note the nice, descriptive names for the test function, and the comments, which describe in human-readable text the actions that our user will take. Mhhhh, descriptive names.....

      We use a LiveServerTestCase which is a new test case provided by Django 1.4, which starts up a test web server with our Django site on it, in a separate thread, for the tests to run against.

      The special methods setUp and tearDown are executed before and after each test. We're using them to start up and shut down our Selenium WebDriver browser instance.

      The implicitly_wait call tells webdriver to use a 3-second timeout when performing its actions - it doesn't slow things down though, because it's a maximum timeout: if Selenium can tell that the page has loaded and any javascript processing is done, it will move on before the end..

      Aside from that, there are 3 lines of test code here:

      self.browser.get(self.live_server_url + '/admin/')
      

      self.browser is the selenium object which represents the web browser, aka the WebDriver.

      .get is tells the browser to go to a new page, and we pass it the url, which is made up of self.live_server_url, which is set up for us by LiveServerTestCase, and then we tack on the /admin/ url to get to the admin site.

      Next we use

      body = self.browser.find_element_by_tag_name('body')
      

      find_element_by_tag_name, which tells Selenium to look through the page and find the HTML element for a particular tag - in this case, body, which means the whole of the visible part of the page. The method returns an WebElement object, which represents the HTML element.

      Finally, we get to an assertion - where we say what we expect, and the test should pass or fail at this point:

      self.assertIn('Django administration', body.text)
      

      This is equivalent to doing

      assert 'Django administration' in body.text
      

      but we use the unittest method on self. because it will give us a more helpful error message.

      The body WebElement object's .text attribute essentially gives us all of the visible text on the rendered page - stripping out all the HTML markup.

      You can find out more about WebDriver and WebElement in the Selenium documentation (choose Python as your language for the examples), or just by looking at the source code:

      http://seleniumhq.org/docs/03_webdriver.html

      At the end, I've left a TODO - calling self.fail() means the test will always fail at the end there, so that will be a reminder that we're not quite finished.

      Oh, and one last thing: it's always nice to give the user a name... Mine is called Gertrude!

      First functional test run

      Let's try running our functional tests:

      python manage.py test fts
      

      And you should see something like this:

      python manage.py test fts
      Traceback (most recent call last):
        File "manage.py", line 10, in 
          execute_from_command_line(sys.argv)
        File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 443, in execute_from_command_line
          utility.execute()
        File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 382, in execute
          self.fetch_command(subcommand).run_from_argv(self.argv)
        File "/usr/local/lib/python2.7/dist-packages/django/core/management/commands/test.py", line 49, in run_from_argv
          super(Command, self).run_from_argv(argv)
        File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 196, in run_from_argv
          self.execute(*args, **options.__dict__)
        File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 232, in execute
          output = self.handle(*args, **options)
        File "/usr/local/lib/python2.7/dist-packages/django/core/management/commands/test.py", line 72, in handle
          failures = test_runner.run_tests(test_labels)
        File "/usr/local/lib/python2.7/dist-packages/django/test/simple.py", line 380, in run_tests
          suite = self.build_suite(test_labels, extra_tests)
        File "/usr/local/lib/python2.7/dist-packages/django/test/simple.py", line 263, in build_suite
          app = get_app(label)
        File "/usr/local/lib/python2.7/dist-packages/django/db/models/loading.py", line 152, in get_app
          raise ImproperlyConfigured("App with label %s could not be found" % app_label)
      django.core.exceptions.ImproperlyConfigured: App with label fts could not be found
      

      Whenever you add a new app to your project, you have to tell Django that you really meant it, and that you want this app to be a part of your site. We do this in settings.py

      settings.py - adding our fts app and setting up the database

      Django stores project-wide settings in a file called settings.py, and that includes which apps we want to be active. Let's edit it now, and find the INSTALLED_APPS part. We need to add 'fts',:

      INSTALLED_APPS = (
          'django.contrib.auth',
          'django.contrib.contenttypes',
          'django.contrib.sessions',
          'django.contrib.sites',
          'django.contrib.messages',
          # Uncomment the next line to enable the admin:
          # 'django.contrib.admin',
          # Uncomment the next line to enable admin documentation:
          # 'django.contrib.admindocs',
          'fts',
      )
      

      Let's try running our fts again:

      $ python manage.py test fts
      
      Creating test database for alias 'default'...
      Traceback (most recent call last):
        File "manage.py", line 10, in 
          execute_from_command_line(sys.argv)
        File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 443, in execute_from_command_line
          utility.execute()
        File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 382, in execute
          self.fetch_command(subcommand).run_from_argv(self.argv)
        File "/usr/local/lib/python2.7/dist-packages/django/core/management/commands/test.py", line 49, in run_from_argv
          super(Command, self).run_from_argv(argv)
        File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 196, in run_from_argv
          self.execute(*args, **options.__dict__)
        File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 232, in execute
          output = self.handle(*args, **options)
        File "/usr/local/lib/python2.7/dist-packages/django/core/management/commands/test.py", line 72, in handle
          failures = test_runner.run_tests(test_labels)
        File "/usr/local/lib/python2.7/dist-packages/django/test/simple.py", line 381, in run_tests
          old_config = self.setup_databases()
        File "/usr/local/lib/python2.7/dist-packages/django/test/simple.py", line 317, in setup_databases
          self.verbosity, autoclobber=not self.interactive)
        File "/usr/local/lib/python2.7/dist-packages/django/db/backends/creation.py", line 256, in create_test_db
          self._create_test_db(verbosity, autoclobber)
        File "/usr/local/lib/python2.7/dist-packages/django/db/backends/creation.py", line 321, in _create_test_db
          cursor = self.connection.cursor()
        File "/usr/local/lib/python2.7/dist-packages/django/db/backends/dummy/base.py", line 15, in complain
          raise ImproperlyConfigured("settings.DATABASES is improperly configured. "
      django.core.exceptions.ImproperlyConfigured: settings.DATABASES is improperly configured. Please supply the ENGINE value. Check settings documentation for more details.
      

      A reasonably helpful error message! Let's open up settings.py again, and set up a database. We'll use the easiest possible, SQLite. Find the lines that mention DATABASES, and change the setting for ENGINE and NAME, like so:

      DATABASES = {
          'default': {
              'ENGINE': 'django.db.backends.sqlite3',
              'NAME': 'database.sqlite',
      

      mysite/mysite/settings.py

      You can find out more about projects, apps and settings.py here:

      Let's see if it worked by trying to run the functional tests again:

      python manage.py test fts
      
      ======================================================================
      FAIL: test_can_create_new_poll_via_admin_site (fts.tests.PollsTest)
      ----------------------------------------------------------------------
      Traceback (most recent call last):
        File "/home/harry/workspace/mysite/fts/tests.py", line 20, in test_can_create_new_poll_via_admin_site
          self.assertIn('Django administration', body.text)
      AssertionError: 'Django administration' not found in u'A server error occurred.  Please contact the administrator.'
      
      ----------------------------------------------------------------------
      Ran 1 test in 2.622s
      

      Hooray - I know it says "Fail", but that's still better than the last test runner, which just had an error. In fact, this is what you'd call an "expected failure" - our FT is checking that the url /admin/ produces the django admin page (by looking for the words "Django Administration", but instead it's just seeing an error. That' because we haven't finished setting up the admin site yet.

      Incidentally, as you run these test, you will probably see a bunch of tracebacks saying something like this:

      [...]
      File "/usr/local/lib/python2.7/dist-packages/django/template/loader.py", line 145, in get_template
        template, origin = find_template(template_name)
      File "/usr/local/lib/python2.7/dist-packages/django/template/loader.py", line 138, in find_template
        raise TemplateDoesNotExist(name)
      TemplateDoesNotExist: 500.html
      

      It's OK to ignore these for now - we'll deal with templates for 500 errors in a later tutorial.

      Switching on the admin site

      This is described on page two of the official Django tutorial:

      We need to edit two files: settings.py and urls.py. In both cases, Django has some helpful comments in those files by default, and all we need to do is uncoment a couple of lines.

      First, in settings.py we add django.contrib.admin to INSTALLED_APPS:

      INSTALLED_APPS = (
          'django.contrib.auth',
          'django.contrib.contenttypes',
          'django.contrib.sessions',
          'django.contrib.sites',
          'django.contrib.messages',
          # Uncomment the next line to enable the admin:
          'django.contrib.admin',
          # Uncomment the next line to enable admin documentation:
          # 'django.contrib.admindocs',
          'fts',
      )
      

      mysite/mysite/settings.py

      And in urls.py, we uncomment three lines that mention the admin site - two near the top, and one near the bottom

      from django.contrib import admin
      admin.autodiscover()
      urlpatterns = patterns('',
          # [...]
          # Uncomment the next line to enable the admin:
          url(r'^admin/', include(admin.site.urls)),
      )
      

      mysite/mysite/urls.py

      Let's see if it worked! Try running the functional tests again:

      $ python manage.py test fts
      
      Creating tables ...
      Installing custom SQL ...
      Installing indexes ...
      No fixtures found.
      running tests
      No fixtures found.
      Validating models...
      
      0 errors found
      Django version 1.4, using settings 'settings_for_fts'
      Development server is running at http://localhost:8001/
      Quit the server with CONTROL-C.
      [28/Nov/2011 04:00:28] "GET /admin/ HTTP/1.1" 200 2028
      
      ======================================================================
      FAIL: test_can_create_new_poll_via_admin_site (tests.PollsTest)
      ----------------------------------------------------------------------
      Traceback (most recent call last):
        File "/tmp/mysite/fts/tests.py", line 16, in test_can_create_new_poll_via_admin_site
          self.fail('finish this test')
      AssertionError: finish this test
      
      ----------------------------------------------------------------------
      

      Hooray! The tests got to the end, just leaving us with our "TODO". Still, I imagine you're thinking it doesn't feel quite real? Just to reassure ourselves then, maybe it would be nice to take a look around manually.

      Taking another look around

      Let's fire up the Django dev server using runserver, and have a look; aside from anything else, it should give us some inspiration on the next steps to take for our site.:

      python manage.py runserver
      

      If you take another look at http://localhost/, you will probably see an error message like this:

      /static/images/page_not_found_debug_error.png

      Now that we've switched on the admin site, Django no longer serves its default "it worked" page. It will give us helpful error messages (while we leave DEBUG = True in settings.py), and this one is telling us that the only active url on the site is /admin/.

      So let's go there instead - point your browser towards http://localhost/admin/, and you should see a slightly different error message

      /static/images/no_such_table_error.png

      Django is telling us that there's a missing table in the database. The solution to this sort of error is usually a syncdb.

      Setting up the database with syncdb

      The database needs a bit more setting up -- so far we gave it a name in settings.py, but we also need to tell Django to create all the tables it needs. For this we use a command named syncdb.

      In this case, syncdb will notice it's the first run, and proposes that you create a superuser. Let's go ahead and do that (you may have to hit Ctrl-C to quit the development server first):

      python manage.py syncdb
      

      Let's use the ultra-secure admin and adm1n as our username and password for the superuser.::

      $ python manage.py syncdb
      Username (Leave blank to use 'harry'): admin
      E-mail address: [email protected]
      Password:
      Password (again):
      Superuser created successfully.
      

      Let's see if that worked - try firing up the development server again:

      python manage.py runserver
      

      And if you go back to http://localhost/admin/, you should see the Django login screen:

      /static/images/django_admin_login.png

      And if you try logging in with the username and password we set up earlier (admin and adm1n), you should be taken to the main Django admin page

      /static/images/django_admin_logged_in.png

      By default, the admin site lets you manage users (like the admin user we set up just now), as well as Groups and Sites (no need to worry about those for now).

      Having a look around manually is useful, because it helps us decide what we want next in our FT. This is particularly true when you're working with external tools, rather than with parts of the website you've written entirely yourself.

      We want to use the django admin site to manage the polls in our polls app. Basically, "Polls" should be one of the options, maybe just below Users, Groups, and Sites.

      If you hover over the blue headers, you'll see that "Auth" and "Sites" are both hyperlinks. "Groups", "Users" and the second "Sites" are also hyperlinks. So, we'll want to add a section for "Polls", and within that there should be another link to "Polls". Let's add that to our FT.

      Extending the FT to login and look for Polls

      So, we now want our FT to cover logging into the admin site, and checking that "Polls" is an option on the main page:

      from django.test import LiveServerTestCase
      from selenium import webdriver
      from selenium.webdriver.common.keys import Keys
      
      class PollsTest(LiveServerTestCase):
      
          def setUp(self):
              self.browser = webdriver.Firefox()
              self.browser.implicitly_wait(3)
      
          def tearDown(self):
              self.browser.quit()
      
          def test_can_create_new_poll_via_admin_site(self):
              # Gertrude opens her web browser, and goes to the admin page
              self.browser.get(self.live_server_url + '/admin/')
      
              # She sees the familiar 'Django administration' heading
              body = self.browser.find_element_by_tag_name('body')
              self.assertIn('Django administration', body.text)
      
              # She types in her username and passwords and hits return
              username_field = self.browser.find_element_by_name('username')
              username_field.send_keys('admin')
      
              password_field = self.browser.find_element_by_name('password')
              password_field.send_keys('adm1n')
              password_field.send_keys(Keys.RETURN)
      
              # her username and password are accepted, and she is taken to
              # the Site Administration page
              body = self.browser.find_element_by_tag_name('body')
              self.assertIn('Site administration', body.text)
      
              # She now sees a couple of hyperlink that says "Polls"
              polls_links = self.browser.find_elements_by_link_text('Polls')
              self.assertEquals(len(polls_links), 2)
      
              # TODO: Gertrude uses the admin site to create a new Poll
              self.fail('todo: finish tests')
      

      mysite/fts/tests.py

      Don't miss the extra import at the top there - we need the special Keys class to send a carriage return to the password field.

      We're using a couple of new test methods here...

      • find_elements_by_name which is most useful for form input fields, which it locates by using the name="xyz" HTML attribute
      • send_keys - which sends keystrokes, as if the user was typing something (notice also the Keys.RETURN, which sends an enter key- there are lots of other options inside Keys, like tabs, modifier keys etc
      • find_elements_by_link_text - notice the s on elements; this method returns a list of WebElements.

      Let's try running the FT again and seeing how far it gets:

      python manage.py test fts
      ======================================================================
      FAIL: test_can_create_new_poll_via_admin_site (fts.tests.PollsTest)
      ----------------------------------------------------------------------
      Traceback (most recent call last):
        File "/home/harry/workspace/mysite/fts/tests.py", line 33, in test_can_create_new_poll_via_admin_site
          self.assertIn('Site administration', body.text)
      AssertionError: 'Site administration' not found in u'Django administration\nPlease enter the correct username and password for a staff account. Note that both fields are case-sensitive.\nUsername:\nPassword:\n '
      
      ----------------------------------------------------------------------
      Ran 1 test in 10.203s
      

      The username and password didn't work - you might think that's strange, because we literally just set them up during the syncdb, but the reason is that the Django test runner actually creates a separate database to run tests against - this saves your test runs from interfering with production data.

      Creating a test fixture

      So we need a way to set up an admin user account in the test database. Thankfully, Django has the concept of fixtures, which are a way of loading data into the database from text files.

      We can save the admin account using the django dumpdata command, and put them into a folder called fixtures in our fts app.:

      mkdir fts/fixtures
      python manage.py dumpdata auth.User --indent=2 > fts/fixtures/admin_user.json
      

      You can take a look at the file if you like -- it's a JSON representation of the user account.

      Now we need to tell our tests to load this fixture. That happens via an attribute called fixtures on the test class:

      from django.test import LiveServerTestCase
      from selenium import webdriver
      from selenium.webdriver.common.keys import Keys
      
      class PollsTest(LiveServerTestCase):
          fixtures = ['admin_user.json']
      
          def setUp(self):
              [...]
      

      mysite/fts/tests.py

      You can find out more about fixtures here:

      Let's try again:

      ======================================================================
      FAIL: test_can_create_new_poll_via_admin_site (fts.tests.PollsTest)
      ----------------------------------------------------------------------
      Traceback (most recent call last):
        File "/home/harry/workspace/mysite/fts/tests.py", line 37, in test_can_create_new_poll_via_admin_site
          self.assertEquals(len(polls_links), 2)
      AssertionError: 0 != 2
      
      ----------------------------------------------------------------------
      Ran 1 test in 3.069s
      
      FAILED (failures=1)
      Destroying test database for alias 'default'...
      

      Now the test is happy that there's a Django admin site, and it can log in fine, but it can't find any links to administer "Polls".

      The polls application, our first Django model and unit tests

      In this next section, we're going to create a new Django "app" for our Polls, as well as a new Poll class to represent our poll objects in the database. We'll also be writing our first unit tests.:

      python manage.py startapp polls
      

      Your directory tree should now look like this:

      mysite
      |-- database.sqlite
      |-- fts
      |   |-- fixtures
      |   |   `-- admin_user.json
      |   |-- __init__.py
      |   |-- models.py
      |   |-- tests.py
      |   `-- views.py
      |-- manage.py
      |-- mysite
      |   |-- __init__.py
      |   |-- settings.py
      |   |-- urls.py
      |   `-- wsgi.py
      `-- polls
          |-- __init__.py
          |-- models.py
          |-- tests.py
          `-- views.py
      

      The next thing we need to do is tell Django that, yes, we really meant it, and would it please take notice of this new polls app and assume we want to use it - we do this by adding it to INSTALLED_APPS in settings.py:

      INSTALLED_APPS = (
          'django.contrib.auth',
          'django.contrib.contenttypes',
          'django.contrib.sessions',
          'django.contrib.sites',
          'django.contrib.messages',
          # Uncomment the next line to enable the admin:
          'django.contrib.admin',
          # Uncomment the next line to enable admin documentation:
          # 'django.contrib.admindocs',
          'fts',
          'polls',
      )
      

      mysite/mysite/settings.py

      Then we need to create the representation of a Poll inside Django - a model, in Django terms.

      Our first unit tests: testing a new "Poll" model

      The tests for the polls app are in polls/tests.py. Again, you can delete the example test that Django put in there. In this test, we'll create a Poll and save it to the database, then retrieve it again to check the poll was saved properly. You'll notice that in this test we don't use Selenium, instead we interact with our application at a much lower level.

      from django.test import TestCase
      from django.utils import timezone
      from polls.models import Poll
      
      class PollModelTest(TestCase):
          def test_creating_a_new_poll_and_saving_it_to_the_database(self):
              # start by creating a new Poll object with its "question" set
              poll = Poll()
              poll.question = "What's up?"
              poll.pub_date = timezone.now()
      
              # check we can save it to the database
              poll.save()
      
              # now check we can find it in the database again
              all_polls_in_database = Poll.objects.all()
              self.assertEquals(len(all_polls_in_database), 1)
              only_poll_in_database = all_polls_in_database[0]
              self.assertEquals(only_poll_in_database, poll)
      
              # and check that it's saved its two attributes: question and pub_date
              self.assertEquals(only_poll_in_database.question, "What's up?")
              self.assertEquals(only_poll_in_database.pub_date, poll.pub_date)
      

      mysite/polls/tests.py

      Whereas functional tests are meant to test how the whole system behaves, from the point of view of a user, unit test are meant to check that the individual parts of our code work the way we want them to. Unit tests are much more granular, and they typically test individual functions or classes.

      Aside from being useful as tests, in the TDD philosophy writing unit tests also helps us because it forces us to do some design before we start to code. That's because when we write test, we have to think about the function or class we're about to write from the outside - in terms of its API, and its desired behaviour. Often when you find yourself struggling to write tests, finding things long winded, it's an indication that the design of your code isn't quite right...

      The django ORM - model classes

      If you've never worked with Django, this test will also be your first introduction to the Django ORM - the API for working with database objects in Django.

      You can see that everything revolves around Poll, which is a class that represents our polls, which we import from models.py. Usually a model class corresponds to a single table in the database.

      In the test we creating a new "Poll" object, and then we set some of its attributes: question and pub_date. The object corresponds to a row in the database, and the attributes are the values for the table's columns.

      Finally, we call save(), which actually INSERTs the object into the database.

      Later on, you can also see how we look up existing objects from the database using a special classmethod, Poll.objects, which lets us run queries against the database. We've used the simplest possible query, .all(), but all sorts of other options are available, and Django's API is very helpful and intuitive. You can find out more at:

      The unit-test / code cycle

      Let's run the unit tests.:

      python manage.py test polls
      

      You should see an error like this:

      [...]
      File "/usr/local/lib/python2.7/dist-packages/Django/test/simple.py", line 35, in get_tests
        test_module = __import__('.'.join(app_path + [TEST_MODULE]), {}, {}, TEST_MODULE)
      File "/home/harry/workspace/mysite/polls/tests.py", line 2, in 
        from polls.models import Poll
      ImportError: cannot import name Poll
      

      Not the most interesting of test errors - we need to create a Poll object for the test to import. In TDD, once we've got a test that fails, we're finally allowed to write some "real" code. But only the minimum required to get the tests to get a tiny bit further on!

      So let's create a minimal Poll class, in polls/models.py

      from django.db import models
      
      class Poll(object):
          pass
      

      mysite/polls/models.py

      And re-run the tests. Pretty soon you'll get into the rhythm of TDD - run the tests, change a tiny bit of code, check the tests again, see what tiny bit of code to write next. Run the tests...:

      ======================================================================
      ERROR: test_creating_a_poll (polls.tests.PollModelTest)
      ----------------------------------------------------------------------
      Traceback (most recent call last):
        File "/home/harry/workspace/mysite/polls/tests.py", line 8, in test_creating_a_poll
          self.assertEquals(poll.name, '')
      AttributeError: 'Poll' object has no attribute 'save'
      
      ----------------------------------------------------------------------
      Ran 323 tests in 2.504s
      
      FAILED (errors=1)
      Destroying test database for alias 'default'...
      

      Right, the tests are telling us that we can't "save" our Poll. That's because it's not a Django model object. Let's make the minimal change required to get our tests further on

      class Poll(models.Model):
          pass
      

      mysite/polls/models.py

      Inheriting from Django's Model class will give us the save() method. Running the tests again, we should see a slight change to the error message:

      ======================================================================
      ERROR: test_creating_a_new_poll_and_saving_it_to_the_database (polls.tests.PollModelTest)
      ----------------------------------------------------------------------
      Traceback (most recent call last):
        File "/home/harry/workspace/mysite/polls/tests.py", line 26, in test_creating_a_new_poll_and_saving_it_to_the_database
          self.assertEquals(only_poll_in_database.question, "What's up?")
      AttributeError: 'Poll' object has no attribute 'question'
      
      ----------------------------------------------------------------------
      

      Notice that the tests have got all the way through to line 26, where we retrieve the object back out of the database, and it's telling us that we haven't saved the question attribute. Let's fix that, by telling Django that we want polls to have an attribute called "question".

      class Poll(models.Model):
          question = models.CharField(max_length=200)
      

      mysite/polls/models.py

      The question attribute will be translated into a column in the database. We use a type of models.CharField because we want to store a string of characters. Django has lots more field types for different data types, see the full list here:

      (Exercise for the reader: Did you notice we haven't got an explicit test for max_length ? It's because it's not entirely straightforward to write one. Once you've been through a few tutorials and are comfortable with unit testing, why not come back and write one? Hint: you'll probably need to use full_clean )

      Now our tests get slightly further - they tell us we need to add a pub_date:

      ======================================================================
      ERROR: test_creating_a_new_poll_and_saving_it_to_the_database (polls.tests.PollModelTest)
      ----------------------------------------------------------------------
      Traceback (most recent call last):
        File "/home/harry/workspace/mysite/polls/tests.py", line 27, in test_creating_a_new_poll_and_saving_it_to_the_database
          self.assertEquals(only_poll_in_database.pub_date, poll.pub_date)
      AttributeError: 'Poll' object has no attribute 'pub_date'
      ----------------------------------------------------------------------
      

      Let's add that too

      class Poll(models.Model):
          question = models.CharField(max_length=200)
          pub_date = models.DateTimeField()
      

      mysite/polls/models.py

      And run the tests again:

      .
      ----------------------------------------------------------------------
      Ran 1 tests in 0.402s
      
      OK
      

      Hooray! The joy of that unbroken string of dots! That lovely, understated "OK".

      So, we've now created a new model (table) for our database, the Poll, which has two attributes (columns).

      Back to the functional tests: registering the model with the admin site

      So the unit tests all pass. Does this mean our functional test will pass?:

      python manage.py test fts
      ======================================================================
      FAIL: test_can_create_new_poll_via_admin_site (tests.PollsTest)
      ----------------------------------------------------------------------
      Traceback (most recent call last):
        File "/home/harry/workspace/mysite/fts/tests.py", line 25, in test_can_create_new_poll_via_admin_site
          self.assertEquals(len(polls_links), 2)
      AssertionError: 0 != 2
      
      ----------------------------------------------------------------------
      Ran 1 test in 10.203s
      

      Ah, not quite. The Poll app still isn't available via the admin site. That's because the Django admin site doesn't automatically contain every model you define - you need to tell it which models you want to be able to administer. To do that, we just need to create a new file with the following three lines inside the polls app called, polls/admin.py:

      from django.contrib import admin
      from polls.models import Poll
      
      admin.site.register(Poll)
      

      mysite/polls/admin.py

      If you've done everything right, the polls app folder will look like this:

      `-- polls
          |-- admin.py
          |-- __init__.py
          |-- models.py
          |-- tests.py
          `-- views.py
      

      Let's try the FT again...:

      ======================================================================
      FAIL: test_can_create_new_poll_via_admin_site (tests.PollsTest)
      ----------------------------------------------------------------------
      Traceback (most recent call last):
        File "/tmp/mysite/fts/tests.py", line 28, in test_can_create_new_poll_via_admin_site
          self.fail('todo: finish tests')
      AssertionError: todo: finish tests
      
      ----------------------------------------------------------------------
      

      Hooray! So far so good. Tune in next week, when we get into customising the admin site, and using it to create polls. In the meantime, why not take a look around the site using the runserver command, and try creating some Polls of your own.

      261 In his very first essay, Plotinus had hinted at a principle higher and more primordial than the absolute Nous, something with which the soul is connected by the mediation of Nous, just as she herself mediates between Nous and the material world. The notion of such a supreme principle was derived from Plato. In the sixth and seventh books of the Republic, we are told that at the summit of the dialectic series stands an idea to grasp which is the ultimate object of308 all reasoning. Plato calls this the Idea of Good, and describes it as holding a place in the intellectual world analogous to that held by the sun in the physical world. For, just as the sun brings all visible things into being, and also gives the light by which they are seen, so also the Good is not only that by which the objects of knowledge are known, but also that whence their existence is derived, while at the same time itself transcending existence in dignity and power.454 “Not somebody—something!” corrected Sandy. “The same ‘something’ that worked the door and shut it!” “Wait!” said Larry, suddenly, earnestly. “I’ll give you the jewels without making any trouble—if you’ll let me put my hand in my pocket I’ll throw the emeralds down to you.” “Not a thing, Sandy. What’s in your mind?” Six years of fighting, of bloodshed, of heavy loss in blood and treasure to the government, the careers of the incarnate devils Juh, Victorio, and Geronimo—all the evils let loose on the southwest from '78 to '85 were traceable primarily to the selling of bad whiskey to a hunting party of Chiricahuas by two storekeepers, greedy of gain. "See here," said Wilson, pointing to a pile of letters and telegrams on his desk. "These are protests against Billings being superseded and sent away. More are coming in all the time. They are worrying the General like everything, for he wants to do the right thing. But I know that they all come from a ring of fellows around here who sell whisky and slop-shop goods to the soldiers, and skin them alive, and are protected by Billings. They're whacking up with him, and they want him to stay. I'm sure of it, but I haven't any proof, and there's no use saying anything to the General unless I've got the proof to back it." "Eh—What's that?" said the rebel, startled by the new proposition and its coolness. "You're one of Mr. Backfield's sons, are you not?" "Soles, plaice, and dabs, HoME免费1号线叫神马一级 ENTER NUMBET 0017
      sgsshc.com.cn
      tuge8.net.cn
      www.chaer2.net.cn
      suli3.com.cn
      www.pinxi7.com.cn
      tibu7.net.cn
      lejin8.com.cn
      liedi0.com.cn
      11sda.com.cn
      www.arts08.com.cn
      东北女人喝尿视频 日本美女裸体图片大胆草裙主论区 黑丝袜做爱肛交视频 猴来变身鼠上阵叁变八见分明 舔香臀 美女平胸 快播强奸乱伦qvwod 家庭激情隐剧院 骑幼幼免费播放器 如何吃男人香蕉 WWW.17YYY.COM WWW.DV9888.COM WWW.ZY-LED.COM WWW.97JY.INFO WWW.77UJ.COM WWW.62EM.COM WWW.51.CN WWW.8888WU.COM WWW.822AA.COM WWW.77SSUU.COM WWW.CHINACSLT.COM WWW.A3555.COM WWW.BBB808.COM WWW.2323U.COM WWW.SEQBO.COM WWW.HHH018.COM WWW.MXIEZI.COM WWW.WJJYWD.COM 超碰最新精频视频 wwwjiusecom 日本大胆人体阴处特写 男人憋尿高潮网站视频 11xianfengziyuan 帝国偷拍 新密白寨拆迁 东方AV在线亚洲色图狠狠撸成人撸片撸一撸成人AV欧美色图在线AVAV在线国 偷拍自拍自拍一区在线观看 二见一树 大片免费观看日皮 色撸撸黄色视频 日韩性奴av 丰乳美艳人妻AV 莹莹姐的丰满乳汁 小白逼 日本的母子恋日本成人 少妇14p 亚洲乱伦少妇图 我和她在水中做爱视频 强奸乱伦小说人妖 黄色网站免费视频无码 看大片wwwbbb330com 小说成人版wwwwanrennet 18avdh 少妇内射在线视频 逍遥牛牛官网 乱曰无码dytducabqcn 小姨子仔仔网 在线av网 曰夲少女性影视 成人伦理福利合集 5夜婷婷 我们立足于在线观看 111wewe怎么进不去 苍井空超短裙丝袜诱惑图片 灰丝妹性爱视频 自拍之家国产 play视频资源 69BBEE 日本在线h小游戏 很很撸若怒 白洁张敏小说 日美av女优做爱动态图 中国情人黄黄色网站 林志玲合成图 老逼在线 成人AV影视下载网 亚洲性交av视频 UU帝国 男人色在线 性高潮黄片 乱校园激情小说 嫖娼系列在线 wwwjiuseteng12com 同事强奸人妻在线 影视操逼的人生 人妻视频l 免插件在线手机av免费 av撸视频撸啊撸 1769v官网 爱偷拍人妻大奶 看个大三骚逼 玖玖热欧美 迅雷岛国片 www865 武侠校园亚洲欧美 香港早期性爱先锋 顶级夫妻爽图 吸白嫩的女人 三级光黄色有声小说 美国男女交朋友黄色 肉棒被淫穴亲亲快播 逼妹大香蕉综合 晚上碰图片 98fn 肥臀裸屁 老牛吃嫩草在线性爱视频 在线制服丝袜经典三级强奸乱伦 妈妈的女儿美脚视频 AV色区wwwku5tv 狠狠爰 哪里有直播av的 哥哥狠狠撸美女的屄 亚洲wwwav4455 WWW911CaO 3344EVCOM 在线观看无码黄色电影 www路hhh889mp4 在线免播放器美女骑兵 媳妇吞精 鸡巴插入女人阴道性交小说 强奸小姑舅妈 出国留学性感母亲成为黑人玩物 百合女如何做爱 艳照门自拍偷拍 成人图片黄色小说网 傻傻发 性爱 欧美色图 性感丝袜少妇自拍 汤佳利汤加丽裸照 中国个女明星色图 亚州色图小说影音先峰 美丽夫人 波多野结衣 性福美女五月天 摸姨妈骚穴 d2e487f00000079f 干30p 儿子干妈妈9种子 爱爱成人电影迅雷下载 欧美ava操逼电影片 刘嘉玲丰插图片 dadanlubaoyubi 亚洲色图片网爱爱谷商城 农夫处女电影 为什么男朋友做爱时喜欢把我插哭 mm粉嫰的黑木耳18p 动漫mm乱摸 淫女黑木耳 肥 胖caobi � heyzocom官网 王祖贤件不穿照片 我肏妈妈的美逼 日本丝袜1080p 色llaotou 富临精工 沈阳张晶 致女儿书在线阅读 wendao 钟欣桐艳照门种子下载 大尺度做爱 操逼操的爽不啊 上原结衣的片去哪个网站找 ed2k高清做爱 美女被迷晕玩丝袜视频 色和尚怡红院 女阴部无遮挡 旗袍少妇做爱爽 性感乳房裸体美女电脑 张筱雨阴道图片全 羙国十次啦中文 和少妇做爱套图 日萌龙兽图 强奸2之制服诱惑 儿子性不满与公公操 美女按摩被插小说 曰本强奸3级片 老太太卖淫rayfile 快播荡妇 另类幼教 阴口艺术照 与妈妈性交故事 苍井空两性黄图 亚洲最美越南美女援交 淫乱图片草裙网 欧美美女无毛b 做僾动态过程图片电影 欧美性交黄色做爱图片 口交口爆性爱 立川明日香代表作 皇片频道播放 あのあるる人体艺术 人体艺术裸片 三级色黄色片图片 好看的日本爱爱电影 丽丽1级人体 色偷偷强奸片 操紧身妹 亚洲欧美小说动漫成人在线 手机飘花伦理magnet 欧美男女性抽插动图片 大胆露图片 bishipin 三级黄图片欣赏 偷拍罗莉p图 成人av电驴下载网站 呦女资源 在线淫色小姐89yygcom av狼友自拍偷成人网 爱色中年 成人超碰成人在线 撸波哥 在妈妈面前撸 色女孩手机偷拍在线播放 ftvhunter幼女 学妹短裤偷拍视频www5xss1com 成人电子ying 丝袜制服绿 古古主播人人BT 欧洲母子乱轮小说 气密四色 三宝局长有声小说mp3完整版 操女家庭教师 强暴类小说短篇 啪啪图激烈的勉费视频 淫淫色民 外国a片免播放器 柔情有声小说 春色夜生活 春色小 小泽玛利亚天宫 大家给个h网 怎样找黄网 插死她综合 大大色导航 日本幼交片 色色色电影 快播高清电影 妈妈儿子乱伦 台湾论坛社区 好男人激情影院 四门电影资源网 快播五月天(荐) 夜射猫 很很l撸 来这撸 啪啪啪图片 谷露113 午夜影院97色色 热のAV 成 人影片 免费观拍拍 第一av网 男人av的天堂411的网扯 娃玖影院 X全网视频-XSE 俺也色综合影院 小说 影音先锋资源中文字幕天堂网分类 彩虹六号H图 haoXX〇O在线永久免费 高清强奸美女电影下载 爱操逼福利导航 250情艺中心页面访问 李菡黑丝 情侣做爱无码视频 雅源本子全彩 越南美女磁力下载 影音先锋网红福利视频 日本男人亲女人屁股软件 35haodiaoyin x art免费官网 4d私人影院在线播放 亚洲九九国产 色达人影院 一本道色综合mp4 604夜色理论 偷偷操不一的99任你操 开心丁香婷婷p 橘梨纱 中文无码 mp4 午夜影院限免 w国产第一页 www,97uuuu,com 阴毛 磁力迅雷下载 美熟少妇++国产激情 抠逼视频无码 日韩女优av在线 sv在线视频免费观看 人妖x视频视频在线播放 3p舔得受不了好爽视频 淫欲丝袜小姨子辣文集合 后入式xoxo在线影院 jj无码激情视频播放 付弯弯性爱视频 988PORN在线视频-男人插女人骚视频-988PORN视频 - 百度 高清日本在线无码 污亚洲 森川安娜在线播放 老王网友自拍 香澄遥无码中字在线 私房色欲色屋 男人天堂国产自拍 伊人科斗窝视频 人人二手车碰人人摸人人草 林芊妤厕所30分钟语音 日本AV69××× 91手机在线chinese XⅤ|DEos 惊天铁案 ftp 牛夜化理片 粉鲍鱼 自拍视频 大几把操逼视频 熟女人阴毛磁力 j鸡巴小視频 和后妈做口交 张飞跃 伦理片 火影之艳色火影txt观看 大奶美性性交姿势 情人Av 春色唐朝网页 高乐播网wwwleee 538po62r62n视频 韩国伦理肉色丝袜诱惑 一本道高清无码欧美伦理 非洲人哆啪啪免费视频 热舞福利120 国产自拍成人视频磁力 怡红院五月天久久爱 伊人久说在线看线 青青草2018追片神器 淫妻导航 48ph紧急访问页面已升级 亚洲啪啪无码 044 vr 本田岬 2做爱网站在线看 K频道国产网红视频网 唐朝aV盛宴 俺来也成人小说 无码一区 夜色邦 magnet 黄色动漫 黑丝透明旗袍美少妇性饥渴 相约家中干炮 胯下裹屌 裹爽了翘开档黑丝美臀后入猛操 黄色中国美女的视频黄色动漫 坏木木坏潮流视频在线观看 gay百度云 国产和女友开房在线播放 邪恶上下抽插视频 新疆美女自拍福利 先锋种子资源在线 新视觉啪啪影院 星杏奈无码先锋影院 97午夜免费神马福利影院 做暧暧 5151在线播放 人人爱人人色 在线免费黄片初中 国模在线高清视频网站 一级毛片免费啪啪视频 谁yo 百度云美女的资源 wwwmvm888co 五月丁香情缴情网 火色院线 www,333zk 制服彼女018 邪恶色图 波多野结衣末减版av 苍井空无码流出续仁科百华 草 榴 社区2017新址 国产自拍3P 苍老师的ab小电影v 人妻按摩集合ed2k 插插 sexbj。com 不撸 鲍鱼小雪美女 成人爽片软件免费下载 s8总决赛 亚洲男人在线天堂2018汉王影院 在线视频国产精品91 微福利日本生活片 冲田杏梨有 2888下载 Sa0777 舔阴 磁力 男女做爱小视频黄片 好玩的午夜网站 s级女优成人精品 大哈鲁在线影院 jibogan 石川施恩惠迅雷 美女自慰冒浆视频在线 Pornxt 云播放日本母乳 苍井空无码在线一本道 不用app的裸裸体美女操逼视频 激情 a片花在线 抽插美女逼逼视频 夫妻 交换 你懂的 洞房花烛夜 种子 511dv影视 345bkcom 4女性毛多 爱丽莎lisaLU福利 nefemefun 男同志chi n免费视频 国产自拍五月天 www'hottttgayset'pro'com 影音先锋 av东京热电影 国产自拍偷拍12p guanren15 magnet 调教堕落中日韩美女 91电影院福利在线播放 伦理片eeuss巨乳伦在线观看 美女白丝在家自慰视频 金荷娜大尺度福利视频 极品女神超漂亮腰细 ftp 性感浴室的做爱的视频 玉女影院 日本三级喷奶视频 井樱莉亚步兵在线播放 思思操干 熟女人妻無畫 广州富姐调教女奴在线视频 久久52岁老熟女露脸做爱 女生黄片自拍 和迪力热巴很像的一个外国女主播的自慰视频 和护士在病床上爱爱视频 啪啪视频永久免费 黄色三级免费在线看无码 啪啪啪九哥视频 黄片成人视频重口味 avmov 色天使姐姐干 手人人在线视频 没有贞操的人妻在线播放 AV 中文字幕 日本大哥 av在线,亚洲av 22222222好爽 土豆成人影视 奇米奇色在线视频 福利外在线自拍 内裤哥高级公寓客厅操极品网袜美女一直干到洗手间出来后 免费 三级域名陈冠希张柏芝 某银行经理和极品E奶情人约炮大奶被艹的直颤抖呻吟很销魂 韩徐艳 素女人妻15p 国产自拍 成人自拍 国语系列强奸 ed2k 5566porm 7m视频在线大香蕉 影视先锋乱伦色图 韩国三人以上性肛交视频播放 2o17免费人妻视频 撸网在线 唐人社影院丝袜制服 西瓜影音 迅雷哥动漫三级 天天狠天天情天天综合 91视视频 影音先锋最新3D动漫 sv成人视频 saofubei 朋友的母亲中文字幕dvd 一个农夫的导航 色酷色伦理电影网 美足社长亚美麻衣 插逼图操逼动态 147人体系艺术图片 欧美男人操女人逼 WWW_AGAA_COM 细说女人馒头比 cha 逼 黄色幼齿电影 韩国女主播钟舒 偷拍国内熟女屄 高清大逼 人兽交动漫图片 骚女资源 欧美裸照图片 电影日女人阴道全部 av777cc 陈紫函的屁股 hd成人免费乱伦 japanese free 18明星淫乱 奇艺色熟女图片 成人性爱网址 舔阴在线电影网 素人人妻色图 大胆的人体摄影艺术 偷拍自拍9p 麦普妮 无码插女人的b流水视频 www3xxbbcom WWW_W23PIPI_COM 骚穴汤芳大胆照 妈妈和阿姨的裸体图片 我和菲佣做爱 尻儿媳的嫩穴 av女优自拍偸拍 WWW_308PP_COM WWW_ZARA_COM WWW_ADULTRAY_COM 色狗发春五月天 百年树人的意思 高级电工证 牛腩怎么做好吃 骨感小骚货视频 亚州幼交 日本好人体 色域h淫淫 免费黄色图片网站 老汉推车黄片 丰满岳母比老婆好干 微州女人叉腿图片 先锋影音成人云播 快播明日花绮罗番号 WWW_XXXXPPPP4_COM 极品换妻操逼大开眼 肥佬影音怎么看黄 色姐妹性交影片 教室门百度云 丁香五月国产电影 人体写真网址 偷paizipai 西西里人体 东京热的种子连接 爱av性爱在线电影 农村题材av 人体私处大胆艺术图 色丁香婷婷五月天 在线影音先锋 镇宫沙丽子 色狼漫画人鱼 ed2k骚自拍 女人插穴 美女和男的考逼照片 梦工厂翔田千里 第8色第八色亚洲色图 女主播杜鹃ed2k 天天撸我去也 全球华人成人网偷拍厕所 天海翼人体艺术摄影 胖子人体13岁人体艺术 偷拍自拍性爱在线观看 快播家庭强奸伦理 XXX欧美群交zhxxxhardcorexxxcom 偷拍熟女人体图片 ziweiqun 免费x站最新领域升级149jcomwww0522bcom 亚洲成人套图专区 姚笛magnet 无介操的网页游戏 淫荡美女网站 超美的外国萝莉啪啪啪 网页无法访问dddd94com 人妻乱仑电影 淫妻浪女无删节 明星激情偷拍自拍19p dizhi99纲手 超碰黑色丝袜 中国式女人操穴视频 黄色的夜晚 操穿褀袍的女人网 中文字幕AV影音姐姐色 s1025dfcom 春药火腿肠 搜索撸淫乱 夜夜骑夜夜干天天啪i 卡通动漫激情图片激情小说成人故事 北京furenda教育发展 舔肛门的文章 欧美情侣女贼 小女孩爱爱综合网 青青草HENHEN freetubechina偷拍自拍 肉蒲电影完整版qvod 金发美女洞穴p 成人裸女舞蹈视频 我与妈妈小说 丝袜让人体艺术 日本人体高清大图 在线看欧美操逼电影完整版 家庭激情隐剧院 天天射寡妇射在线播放你懂的 conporn动漫 爸爸在隔壁9 淫色小说5 色小姐之老人操b自拍 欧美性爱视频图片 琪琪日逼网 色久久色琪琪第四色www978aaacom gaya片 手fn看黄片 27P亚洲 尼姑云影视 丝袜脚FOOTJOB 丝袜自慰快播 wwwsusu80com 乱伦的大家族 幼香阁楼 成人AV欧美视频 偷拍自拍系列喜欢找老外大屌联谊的夫妻 快用力插我15P 翁媳操逼乱伦 狠狠插影院免费观看所视频有电影 亚洲色图欧美色图色导航在线视频 亚洲美女日韩 欧洲一级性爱图片 日本牛逼插插电影 真人版成人片在线看网站 950pao视频 看看你的屄 舔阴吸乳 女子自慰在线观看 wwwzmp567 丝袜无码vr在线japan 极度诱惑av 淫妈妈网 三级片网站222 在线香港欧美亚洲三级偷拍 久久草手机在线观看 luersuoAV在线观看 小孩做爱的网址 99不用播放器 2017年最新h动漫大全 播放开心激情网 童交tube 咪咪a电影 小莹姐的乳汁2百度 雅酷影院在线手机版 927ppcom J8XXXcom 女孩与狗爱爱后死亡 小美女cmm 成人网啊啊啊a 性操美女怀孕视频播放 av免费色奶奶 性福咪咪 影视操逼的人生 开心五月先锋影音资源 就要插久草在线 久久野外中国 www789黄色播放器 看看美女的麻批 123kkkkkcom 大黑驴冰冰小说 caopron线视频观免 风月恶之花剧情介绍 有声小说徐娘乐 wwwgulou333com 淫淫乱人妻淫 女优美弥藤无码先锋影音 女性性高潮时的外阴图 韵味熟女影音先锋 欧美bt偷拍自拍 搞处女66 日本女尤金粉全身 社旗黑社会 WWWSUSU91C0med2k 人妻女友色尼姑好屌色 l激情图片 插插姐妹在线观看 看少妇BBB动态图 人兽交免 搜索jizzwww日本女性妈妈 37资源论坛日光月美 二姨母女屁眼 抽插小学生下面视频 黄色成人游戏打飞机 妓女的妓拍拍 欧美激情床戏 擦妹妹之吻 性之听吧小苮儿 欧美 美穴 色色鸡巴图片 边看av边做爱无码视频 与小姨乱伦 日本美少女色图片15p 龙腾小说txt下载 江祖平普宁 先锋xingaidanaimei 兽兽视频种子torrent thunder a片秀爽爽爽 狗口活1级 黑人专区在线播放 我想肏女人屄 北条麻妃美脚先锋 婷婷色 五月天图片 纹身女做爱 外国男女性爱图片 外国美女口交20p 超穴 非洲性爱录像 美女吃男大j吧图 胯下淫荡少妇 抽女小穴小说 狂操冈田丽娜 亚洲中国同学性爱区 午夜影院新婚夫妻妻子被插得惨叫 幼逼百图 儿子操老逼 干屁股影片影音先锋 春妮妹妹百度图片 爆操肌肉熟女 贝朗家私 专车司机 治脚气最有效的方法 不举总裁的盗种妻 精灵的守护者 辨别真银饰品 操屄屄综合网 刘嘉玲大屄 母子交媾 钟欣桐艳照门种子下载 狠狠干妹子 自拍口射 暴操妈妈 模特打炮网 ed2k韩国高清无码 wwwdd43com 性侵女教师高清图片 黄色性交大片全集 美女用手掰逼套图 春色校园短小说 今年的毛片 大屌刘亦菲 日萌龙兽图 草骚屄大奶子 骚b草奶 日本小泽艳图 欧美女子与狗随便性交 uc浏览器中熟妇露屄照 黑丝强奸 性吧有你偷偷撸 老太太乳交 动漫ek2 anquye3p 秋本由香里番号图片 caomeimebibi 去哪里找李宗瑞视频 不夜城zipai 美女动漫性爱很黄动态图 男女性爱吧 打鸡巴插大白屁股图 美女艺术片快播 快播最新波哆野结依 日本文化 超淫荡性高潮 免费日本萝莉网站 最新99久久网址99re8ggg03com easygalscom 正在播放中国sm绳艺 3d亚洲16p 久久色综an 被艹小姐免费视频 日本毛片基地一亚洲AVmzddcxcn 无码免费中文字幕wwwhhxxoo1com 巨乳波霸网站 妈妈公共 成人黄片av资源网站 wwwcijiiutv 校园春色亚洲无码影音 vr三级片 AV天堂自拍偷拍亚洲色图 天海翼手机直播下载官方APP免费观看所有电影 东南亚性爱大片 久草视频在线国产片wwwx4w4com poco能搜成人片 黄色热热 wwwz99eecom 汇聚全环成人视频在线观看 欧美老女人和小伙性交15p 在线视频区自慰 91gav在线电影 亚洲色图清纯唯美陈冠希 插妈妈在线视 81XAC0mmagnet 我的啪啪生涯 首页中文字幕偷窥自拍人妻熟女 知己网 笑网红灯区 黄色读书乱伦 av母子相奸 抽插肥臀舅妈 哈市身材爆好的鲍鲍很漂亮噢 喜宝有声小说 有没有比较色的小说 梨园春色 小泽玛利亚最近 日本成人 www黄色com 怎么才能看黄片 极品黄色小说 撸撸黄色小说 小仓奈奈 大槻ひびき 欢乐夫妻 至尊皇朝 我要插逼逼 插插洞插插B 皇家帝国花园 家庭乱伦A片 聚色堂成人网 性乐汇色电影 四门电影资源网 910668快播电影 同涩限制分级 能考A片的网站 黄片快猫 资源网丝袜 aV性爱无需下载App,手机直接看 AV,A片,毛片啪啪啪 多毛老妓女接客视频 美女p62p62p62p 巨乳 人妻 影院 公厕偷拍自拍 最新福利自拍写真视频 秋霞午夜o855影院云播 日本视频色天使 日本特级黃色视屏 曰本色惰高清视频 母乳视频 老师玩具化计划在线 雪本芽依 西瓜萝莉 康先生之商学院王悠悠 色哥128 手机变态另类AV在线 亚洲天堂SV在线 亚洲 黑丝 猫咪在线国产丝袜 狼友 国庆 福利 提示:点开黑屏或白屏缓冲五秒 [红包] 福利免费视频 [红包] ht aaa女郎视频35完整版 伦理聚合高请无码在线播放 在哪可以看国产自拍 韩国女主播 迅雷下载 福利社午停免费影院 黑人和中国人群交视频 丁香五月天的小说全集 Juy ftp GVG303 七色色综合网 任我操类似的网站 ios大尺度电影 中文字幕人妻出轨av番号 881vz 校园av在线视频 ipx034播放 岛国三级黄色视频 男女操b视频 日本香港伦理三级视频 天天啪久久爱国产门 磁力链 月见栞 日本高清在线视频观看 2018最新国内自拍小视频 美国成人高清视频 色院影视 秋霞微博连接i 李宗瑞av在线 丝淫办公室 午夜大片的应用 俄罗斯a片伦理免费观看 FC2PPV-771536 成人自拍偷拍视频在线观看 看看 忧忧啪啪 婷婷五月天春色 亚洲xxxooo 迪丽热巴三部曲下载 苍井优av喷水视频 强奸迷奸番号 女优无码种子视频 997成人在线。 干岳母狼人影院 m蝌蚪网 大桥未久中文字幕 唐朝丅V 怡红院成人www 拍拍影院三级片 丝袜激情视频网站大全 邪恶木 早川濑里奈cili 6080蓝雨a片 51影院h动漫 石原莉奈影视在线 影音先锋欲求不满 欧美男淫交视频 欧美婊子自慰 打炮逼洞视频 日韩 福利 主播 美女浮淫视频 漂亮主播找炮友 日本在线高清m949dtv 800aiai 90av最新 好屌700 欧美人妖自口ladybays 在哪里可以看h动漫短视频 厕奴苏儿 北京紧身牛仔裤大床激战 不卡的在线美女va视频 苍井空a人妻免费视频 草根本无码视频 爆菊花福利视频 色篇大王视频下载 rki 乳喷系列合集 淘av导航 www957uucom 五月丁香成人影院 www694av,com 被迫杀人西瓜 大香蕉激情小视频在线 影院大全福利 多啪啪免费视频 无内丝袜福利在线 安娜苏恋夜视频福利 勾魂影院黑丝性交免插件 清纯唯美亚洲另类 成人三级免费视频 欧美xo12345视频免费观看 SM玉足女主玩弄身材非常性感 嗯嗯嗯啊啊啊上司 影音先锋 嫖鸡视频 催情吧 无遮挡性交视频 cili 600 xx 蜜罐磁力下载 AV女优无码资源 苍井空无码 百度云分享 草莓在线观看偷拍久视频在线观看 操逼视频在线看。 a级毛片小说 井空 在线 超碰97影音先锋 国内自拍偷拍图库 咸湿动漫在线 44480影院 大香蕉假面女皇 激情戏新视觉 体位 番号 伦理片旧版金瓶桶 高清日本伦理聚合无码 邪恶Hshipin 少妇被公公抽插视频 色和尚伊人久久手机在线视频 寂寞草高清视频无码 97视频视视频在线观看 最大全国的黄色网站 国产自拍午夜青青 B综合社区 久久青草影院 29片棕榈叶琪琪 邪恶萝莉古明地觉you 好xoo亚洲站永远免费 精品国产自在线拍400部 女生黄片自拍 神马影院5m福利视频 插入日本人体 3p国产乱视频 asmr福利社区 美国女孩勉费黄色网站快播 97色伦在线综合视频 四虎网站明星艳照门在哪 男女肝交视频在线播放 _ee255com 真实强奸迅雷 GEEEⅩⅩⅩ 人人看人人摸人人操2019 2017年电影日本重口味迅雷哥 欧美亚洲图区另类国产第一页 露奶露阴毛全裸乳神 真人超大但在线视频 美女直流白浆在线视频 我想看一个一级毛片 丝袜黑色脚交图片福利 咪咪2 mp4 色婷婷激情综合 神雪在线 青草草国产偷拍在线av 色女福利影院 雨露影院 曰本黄色无码 口交和乳交视频 女优性视蘋 性爱淫视频mianfeiguankan 国内自拍黄片 东京热+磁力链接 ftp 扒开bbb 强奸乱伦第1页www.510dd.com 草萧淑慎撸撸 女人最私密地方实图 影音先锋刘嘉玲真实强奸 翘屁股骚女人gif qingjinghuiyan 五月天人体网 四房色内射 中国性交比赛图片 打屁股2升级版 幼女幼穴 黄色网之年 操骚逼妈妈中文对话 绪川里绪超高级 日本人操逼图 影音先锋欧美人与动物性交 韩国女主播种子迅雷 淫荡人妻爱色 亚洲蜜桃诱惑 人休模特摄影男女双人棚 WWW_W3_ORG 为什么97蜜桃色图片看不了