Django

来自开放百科 - 灰狐
2020年12月15日 (二) 14:20Allen (讨论 | 贡献)的版本

跳转到: 导航, 搜索
Django.gif

Django: The Web framework for perfectionists with deadlines

目录

简介

Django 是一个高级 Python web framework,它鼓励快速开发和干净的、MVC设计。它包括一个模板系统,对象相关的映射和用于动态创建管理界面的框架。Django遵守BSD版权。

Django 很像 Ruby on Rails.

没有真理,只有解释。—— 尼采

新闻

Wikipedia-35x35.png 您可以在Wikipedia上了解到此条目的英文信息 Django Thanks, Wikipedia.

版本

Django 3.x

Django3.1 教程

Django 2.x

Django 2.0 is far more friendly for Web 2.0 than Ruby on Rails.

“Django 2.0” is, apparently, built on the Django 0.96.2 codebase, which is rather interesting since that means it could be missing:

  • At least one criticial security fix (that’s why we had a Django 0.96.3).
  • The refactored Django ORM, including much more flexible query backends and support for model inheritance (queryset-refactor happened after 0.96).
  • Full Unicode support (the Unicode branch happened after 0.96).
  • Auto-escaping templates, so open wide for cross-site scripting attacks (auto-escaping landed after 0.96).
  • The full django.forms library, including formsets and easy model-generated forms and support for generic relations (all landed after 0.96).
  • Swappable uploading and file-storage handlers (landed after 0.96).
  • The easier-to-use, easier-to-customize, much-more-flexible admin (newforms-admin landed after 0.96).
  • django.contrib.gis for GIS support (landed after 0.96).
  • The refactored contrib.comments (landed after 0.96).
  • The refactored (and immensely faster) signal dispatcher (landed after 0.96).
  • The ability to run Django on the Java virtual machine (Jython compatibility didn’t happen until 1.0).
  • An order-of-magnitude faster test framework (landed last week for Django 1.1).
  • Aggregation support in the ORM (landed last week for Django 1.1).
  • A couple thousand bugfixes which have gone into Django since 0.96.
  • Somewhere around 40,000 lines of added/improved documentation.

特性

  • 对象相关的映射

完全在Python中定义你的数据模型。你可以免费得到一个丰富的,动态访问数据库的API--但如果需要你仍然可以写SQL语句。

  • URL 分发

URL的设计漂亮,cruft-free,没有框架的特定限定。象你喜欢的一样灵活。

  • 模版系统

使用DjanGo强大而可扩展的模板语言来分隔设计、内容和Python代码。

  • Cache系统

可以挂在内存缓冲或其它的框架实现超级缓冲 -- 实现你所需要的粒度。

  • 自动化的管理界面

不需要你花大量的工作来创建人员管理和更新内容的接口。DjanGo可以自动完成。

  • 支持多种数据库

已经支持Postgresql, MySql, Sqlite3, Oracle, ado_mssql

指南

pip install django
pip install django==1.11.5
pip3 install django==3.1
conda install Django // 通过Anaconda的方式安装
python或python3 
>>> import django
>>> print(django.get_version())
1.11.5

或者, 下载类似安装包 Django-1.0.tar.gz https://www.djangoproject.com/download/

tar xzvf Django-0.95.tar.gz
cd Django-0.95
sudo python setup.py install // 会去下载相关 egg 包,egg与Java jar 类似,包含版本化的包和依赖性管理
>>> import django
>>> django.VERSION
>>> from django.template import Template, Context
解决 ImportError: Settings cannot be imported, because environment variable DJANGO_SETTINGS_MODULE is undefined.
>>> from django.conf import settings 或 export DJANGO_SETTINGS_MODULE=mysite.settings
>>> settings.configure(DEBUG=False)
>>> t = Template('My name is {{ my_name }}.')
>>> c = Context({'my_name': 'Allen Long'})
>>> t.render(c)
cd /var/www
django-admin.py startproject mysite
cd mysite
python manage.py runserver
http://localhost:8000
or http://192.168.1.3:8000 //本机 IP
Alert!: Unable to connect to remote host
可这样启动  #python manage.py runserver 192.168.1.3:8000 
http://192.168.1.3:8000 // OK 啦

模块化

Django 模块化、组件、Apps

Django Packages

More : http://code.djangoproject.com/wiki/DjangoResources#Djangoapplicationcomponents

MVC

models.py (the database tables)

from django.db import models
class Book(models.Model):
    name = models.CharField(maxlength=50)
    pub_date = models.DateField()

views.py (the business logic)

from django.shortcuts import render_to_response
from models import Book
def latest_books(request):
    book_list = Book.objects.order_by('-pub_date')[:10]
    return render_to_response('latest_books.html', {'book_list': book_list})

urls.py (the URL configuration)

from django.conf.urls.defaults import *
import views
urlpatterns = patterns(,
    (r'latest/$', views.latest_books),
)

latest_books.html (the template)

<html><head><title>Books</title></head>
<body>
Books
    {% for book in book_list %} <li>{{ book.name }}</li> {% endfor %}
</body></html>

第一个应用

创建一个polls应用

mysite/python manage.py startapp polls
vi polls/models.py
from django.db import models
class Poll(models.Model):
   question = models.CharField(maxlength=200)
   pub_date = models.DateTimeField('date published')
class Choice(models.Model):
   poll = models.ForeignKey(Poll)
   choice = models.CharField(maxlength=200)
   votes = models.IntegerField()
vi settings.py
INSTALLED_APPS = (
   'django.contrib.auth',
   'django.contrib.contenttypes',
   'django.contrib.sessions',
   'django.contrib.sites',
   'mysite.polls'  // 增加这一行
)

创建数据库

mysql>create database polls
vi settings.py
DATABASE_ENGINE = 'mysql'
DATABASE_NAME = 'polls'
DATABASE_USER = 'root'
DATABASE_PASSWORD = 
DATABASE_HOST = 'localhost'
DATABASE_PORT = '3306'
python manage.py syncdb // 修改表结构后,可用此步骤更新数据库

python manage.py sql polls
BEGIN;
CREATE TABLE `polls_poll` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    `question` varchar(200) NOT NULL,
    `pub_date` datetime NOT NULL
);
CREATE TABLE `polls_choice` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    `poll_id` integer NOT NULL REFERENCES `polls_poll` (`id`),
    `choice` varchar(200) NOT NULL,
    `votes` integer NOT NULL
);
COMMIT;

可看到在mysql中已经创建了相关表

mysql> show tables;
+----------------------------+
| Tables_in_poll             |
+----------------------------+
| auth_group                 |
| auth_group_permissions     |
| auth_message               |
| auth_permission            |
| auth_user                  |
| auth_user_groups           |
| auth_user_user_permissions |
| django_content_type        |
| django_session             |
| django_site                |
| polls_choice               |
| polls_poll                 |
+----------------------------+
12 rows in set (0.00 sec)
python manage.py shell
>>> from mysite.polls.models import Poll, Choice
>>> Poll.objects.all()
[]
>>> from datetime import datetime
>>> p = Poll(question="What's up?", pub_date=datetime.now())
>>> p.save()
>>> p.id
1L
>>> p.question
"What's up?"
>>> p.pub_date
datetime.datetime(2006, 9, 1, 15, 8, 1, 135114)

Django admin site默认没有激活,可通过以下三个步骤激活它

1. Add "django.contrib.admin" to your INSTALLED_APPS setting in settings.py
2. Run python manage.py syncdb // Creating table django_admin_log
3. vi urls.py  
 (r'^admin/', include('django.contrib.admin.urls')),
python manage.py runserver
http://local:8000/admin/ :)
vi mysite/polls/models.py
class Polls(models.Model):
   # ...
   class Admin:
       pass
vi mysite/urls.py

from django.conf.urls.defaults import *
urlpatterns = patterns(,
    (r'^polls/$', 'mysite.polls.views.index'),
    (r'^polls/(?P<poll_id>\d+)/$', 'mysite.polls.views.detail'),
    (r'^polls/(?P<poll_id>\d+)/results/$', 'mysite.polls.views.results'),
    (r'^polls/(?P<poll_id>\d+)/vote/$', 'mysite.polls.views.vote'),
)
vi mysite/polls/views.py

from django.http import HttpResponse
def index(request):
    return HttpResponse("Hello, world. You're at the poll index.")
def detail(request, poll_id):
   return HttpResponse("You're looking at poll %s." % poll_id)
http://localhost:8000/polls/
Hello, world. You're at the poll index.
http://localhost:8000/polls/100
You're looking at poll 100.

数据库

DEFAULT_CHARSET = 'utf-8'
#DATABASE_ENGINE = 'sqlite3'
#DATABASE_NAME = os.path.join(DIRNAME, 'database.db')
DATABASE_ENGINE = 'mysql'
DATABASE_NAME = 'tagging_test'
DATABASE_USER = 'root'
DATABASE_PASSWORD = 
DATABASE_HOST = 'localhost'
DATABASE_PORT = '3306'
#DATABASE_ENGINE = 'postgresql_psycopg2'
#DATABASE_NAME = 'tagging_test'
#DATABASE_USER = 'postgres'
#DATABASE_PASSWORD = 
#DATABASE_HOST = 'localhost'
#DATABASE_PORT = '5432'

Cassandra

Web Server

Apache

edit your httpd.conf

<Location "/mysite/">
   SetHandler python-program
   PythonHandler django.core.handlers.modpython
   SetEnv DJANGO_SETTINGS_MODULE mysite.settings
   PythonDebug On
</Location> 
http://localhost/mysite/

Nginx

Django on Nginx

Lighttpd

问题

收集整理的一些常见问题

项目

Awesome Django Awesome.png

Djangopowered126x54.gif

国外

国内

源代码

Sites with Source Code

书籍

文档

图集

链接

分享您的观点
个人工具
名字空间

变换
操作
导航
工具箱