首页>>后端>>Python->django网站用什么驱动(2023年最新整理)

django网站用什么驱动(2023年最新整理)

时间:2023-12-14 本站 点击:0

导读:很多朋友问到关于django网站用什么驱动的相关问题,本文首席CTO笔记就来为大家做个详细解答,供大家参考,希望对大家有所帮助!一起来看看吧!

如何在阿里云上部署django网站

Django的部署建议放在Linux系统上。比较易于新手入门的Linux服务器发布版应该是Ubuntu,aliyun上目前最新版本应该是16.04,建议64位。

如果你是新网站,没有多少访问量,建议1核1内存或者2G内存,1-2M的宽带就足够了。最近双十一还有活动。

部署,安装Nginx:

apt install nginx

不知道你的Django项目是python2还是Python3,如果选用uwsgi部署方式,除了uwsig需要装一个uwsgi-plugin-python或者uwsgi-plugin-python3

剩下的看官方文档的uwsgi部署部分基本就ok了,因为全写实在太长了,还有的uwsgi配置文件。

如何使用pycharm配合部署python的django框架

安装软件

安装 Python 2.7、PyCharm、pip(Python包管理工具)、Django ( pip install Django)

部署

PyCharm 新建Django工程

完成后,其目录如下:

子目录MyDjangoProject下表示工程的全局配置,分别为setttings.py、urls.py和wsgi.py,其中setttings.py包括了系统的数据库配置、应用配置和其他配置,urls.py则

表示web工程Url映射的配置。

子目录student则是在该工程下创建的app,包含了models.py、tests.py和views.py等文件

templates目录则为模板文件的目录

manage.py是Django提供的一个管理工具,可以同步数据库等等

启动

创建完成后,就可以正常启动了。点击Run 按钮,启动时报错了:

Traceback (most recent call last):

File "D:/workspace/MyDjangoProject/manage.py", line 10, in module

execute_from_command_line(sys.argv)

File "D:\Python27\lib\site-packages\django\core\management\__init__.py", line 338, in execute_from_command_line

utility.execute()

File "D:\Python27\lib\site-packages\django\core\management\__init__.py", line 312, in execute

django.setup()

File "D:\Python27\lib\site-packages\django\__init__.py", line 18, in setup

apps.populate(settings.INSTALLED_APPS)

File "D:\Python27\lib\site-packages\django\apps\registry.py", line 89, in populate

"duplicates: %s" % app_config.label)

django.core.exceptions.ImproperlyConfigured: Application labels aren't unique, duplicates: admin

应该是admin配置冲突了,打开setttings.py文件,发现admin配置重复了

INSTALLED_APPS = (

'django.contrib.admin',

'django.contrib.auth',

'django.contrib.contenttypes',

'django.contrib.sessions',

'django.contrib.messages',

'django.contrib.staticfiles',

'django.contrib.admin',

'student',

)

注释掉其中一行后(为什么会有这个问题,估计是个bug),重新启动,ok

web工程添加页面

此时,我们尚没有写一行代码,程序就duang跑起来了! 快添加一个Hello World的页面吧。

打开student/views.py文件,输入以下内容

def sayHello(request):

s = 'Hello World!'

current_time = datetime.datetime.now()

html = 'htmlhead/headbodyh1 %s /h1p %s /p/body/html' % (s, current_time)

return HttpResponse(html)

打开url.py文件,需要进行url映射的配置:

url(r'^student/', sayHello)

当用户输入http://**/student 时,便会调用sayHello方法,该方法通过HttpResponse()将页面内容作为响应返回。

重启服务,访问

在views.py页面可以将页面需要的元素通过字符串的形式,调用HttpResponse()类作为响应返回到浏览器。但这样,页面逻辑和页面混合在一起,手写起来很繁琐,工作量比较大。如果我们需要展示一些动态的数据,而页面基本不改变的情况下,该怎么做呢?

比如在用户访问 时,我们想动态展示一些学生的数据。可以这样做:

首先在templates目录下,新建 student.html文件,该文件作为模板,内容如下:

!DOCTYPE html

html

head

title/title

/head

body

ul

{% for student in students %}

li

id:{{ student.id }},姓名:{{ student.name }},age: {{ student.age }}

/li

{% endfor %}

/ul

/body

/html

修改 views.py文件,添加方法showStudents()

def showStudents(request):

list = [{id: 1, 'name': 'Jack'}, {id: 2, 'name': 'Rose'}]

return render_to_response('student.html',{'students': list})

该方法将list作为动态数据,通过render_to_response方法绑定到模板页面student.html上。

添加url映射,url(r'^showStudents/$', showStudents)

修改settings.py模板配置:'DIRS': [BASE_DIR+r'\templates'],

重启服务,访问,出现:

至此,我们已可以正常将一些“动态”数据绑定到模板上了。但是怎么样访问数据库呢?

从数据库获取需要的数据,展示在页面上?

首先需要安装数据库驱动啦,即mysql_python,

接着配置数据库连接:

DATABASES = {

'default': {

'ENGINE': 'django.db.backends.mysql',

'NAME': 'student',

'USER': 'root',

'PASSWORD': '1234',

'HOST': '127.0.0.1',

'PORT': '3306',

#'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),

}

}

配置完成之后,需要检测数据库配置是否正确,使用 manage.py shell命令,进入shell交互界面:

输入:

from django.db import connection

cursor = connection.cursor()

如果不报错,说明配置正确。

创建model,打开models.py,定义model如下:

class Student(models.Model)

id = models.BigIntegerField

name = models.CharField(max_length=20, default='a')

然后调用 manage.py syncdb

正常情况下,该步骤做完之后,model 会和数据库保持一致性。但是在测试中,命令执行成功后,却发现数据库并没有建立该表。

对于该种情况,做如下操作即可正常:

(1)注释掉models.py文件代码,执行 manage.py makemigerations student

【和manage.py migerate --fake】

(2)打开注释,执行【 manage.py makemigerations student和 】manage.py migerate命令

通过以上两步,便可正常操作了

views.py中添加方法:showRealStudents

def showRealStudents(request):

list = Student.objects.all()

return render_to_response('student.html', {'students': list})

urls.py添加映射 url(r'^showRealStudents/$', showRealStudents)

重启服务,打开连接:

页面输出正常。

至此,使用Django,可以正常操作数据库,自定义模板,在页面展示数据了。

服务器

由于Django自带轻量级的server,因此默认使用该server,但实际生产中是不允许这么干的,生产环境中通常使用Apache Httpd Server结合mod_wsgi.so来做后端服务器。

以下部署环境为:Python2.7.6

1、安装httpd-2.2.25-win32-x86-no_ssl.msi

2、将下载好的mod_wsgi.so 放在 D:\Program Files\Apache Software Foundation\Apache2.2\modules 模块下。

3、在新建的web工程 MyDjangoProject目录下新建 django.wsgi文件

内容如下(相应的目录需要修改):

import os

import sys

djangopath = "D:/Python27/Lib/site-packages/django/bin"

if djangopath not in sys.path:

sys.path.append(djangopath)

projectpath = 'D:/workspace/MyDjangoProject'

if projectpath not in sys.path:

sys.path.append(projectpath)

apppath = 'D:/workspace/MyDjangoProject/MyDjangoProject'

if apppath not in sys.path:

sys.path.append(apppath)

os.environ['DJANGO_SETTINGS_MODULE']='MyDjangoProject.settings'

from django.core.wsgi import get_wsgi_application

application = get_wsgi_application()

4、修改httpd.conf ,添加如下:

LoadModule wsgi_module modules/mod_wsgi.so

WSGIScriptAlias / "D:/workspace/MyDjangoProject/django.wsgi"

Directory "D:/workspace/MyDjangoProject/"

Options FollowSymLinks

AllowOverride None

Order deny,allow

Allow from all

/Directory

ok,重启server,页面正常了。

在部署的过程中,遇到一个异常,如下:

The translation infrastructure cannot be initialized before the apps registry is ready

原因是django.wsgi一开始按照较为古老的写法,改为新版本的写法就Ok了。

哪些网站使用django开发的

Django是用于构建Web应用程序的MVT Web框架。巨大的Django网络框架附带了如此多的“电池”,使开发人员常常对所有东西如何协同工作感到惊讶。添加这么多电池的原理是在框架本身中具有通用的Web功能,而不是将后者作为单独的库添加。

Django框架受欢迎的主要原因之一是庞大的Django社区。这个社区是如此之大,以至于有一个专门的网站供各个方面的开发人员开发第三方软件包,其中包括身份验证,授权,成熟的Django支持的CMS系统,电子商务附加组件等。

Python

Python可以说是最容易学习的编程语言之一,因为它具有简单的语言构造,流程结构和简单的语法。它功能多样,可运行嵌入在许多设备中的网站,桌面应用程序和移动应用程序,并在其他应用程序中用作流行的脚本语言。

领英

它是全球最受欢迎的博客评论托管网站之一。通过Disqus可以轻松与大多数流行的CMS(内容管理系统)(如WordPress等)集成。Django拥有超过5000万用户,可以满足站点所有者接触社区的需求。

火狐浏览器

Mozilla浏览器是仅次于Google Chrome的世界第二广泛使用的浏览器。现在,Mozilla的帮助页面是使用Django框架构建的。

python web开发用什么框架

1、Django框架

Django是一个开放源代码的Web 应用框架,由纯Python写成,是目前 Python 语言中主流 de 三大Web框架之一(flask、django、tornado),是最容易上手的框架。

2、Flask框架

flask框架是python中的一个轻量级的前后端开发框架,不同于Django,flask只提供基础的功能,其他的功能需要安装各种插件。因为轻量,所以可以用来做一些小工程和低流量的开发;大型工程也可以使用flask框架,但是就需要安装很多插件。

3、Pyramind框架

Pyramind是一个扩展性很强且灵活的 Python Web 开发框架。上手十分容易,比较适合中等规模且边开发边设计的场景。Pyramid 不提供绝对严格的框架定义,根据需求可以扩展开发,对高阶程序员十分友好。

4、web.py框架

web.py 是一个Python 的web框架,它简单而且功能强大。web.py 是公开的,无论用于什么用途都是没有限制的。而且相当的小巧,应当归属于轻量级的web 框架。但这并不影响web.py 的强大,而且使用起来很简单、很直接。

5、Tornado框架

Tornado是一个Python web框架和异步网络库,最初是在FriendFeed开发的。通过使用非阻塞网络I/O, Tornado可以扩展到数以万计的开放连接,非常适合长轮询、WebSockets和其他需要与每个用户进行长时间连接的应用程序。

6、TurboGears框架

TurboGears具有其他Python框架都具有的功能,但与其他框架一样没有限制,因此可以说是框架的终结者。也可以应用于简单的微体系结构项目。它感觉不像在框架中工作,而是写新的功能。

7、CherryPy框架

CherryPy是一个轻量级的python网络框架,用来创建网络应用。比如快速实现api接口、做网站后端这样。感觉和flask差不多。

8、Flcon框架

Falcon是一个最低限度的ASGI/WSGI框架,用于构建任务关键型REST API和微服务,重点关注规模上的可靠性、正确性和性能。

9、Asgineer框架

Asgineer是一种编写异步Web应用程序的工具,使用尽可能少的抽象,同时仍然提供友好的API。

10、Bottle框架

Bottle是一个用于Python的快速、简单和轻量级的WSGI微型网络框架。它作为单个文件模块分发,除了Python标准库之外没有任何依赖项。

django 框架开发的网站有哪些?

Django + Python:Disqus,Pinterest,Instagram,Washington Post。

国内用Python开发的知名网站有豆瓣和知乎等等。不可否认,国内用Django开发的大型网站还不多,但随着Python越来越热及Django越来越成熟,相信会有更多人选择Django来提高Python Web开发效率。

Python的Django框架是Python web框架中最重量级的一个了,使用它几乎能完成各种需求的网站开发。

扩展资料:

Django的主要目标是使网站开发变得简单。Django注重组件的重用性和“可插拔性”(即模块化)。在Django中Python被普遍使用,甚至包括配置文件和数据模型。Django于2008年6月17日正式成立基金会。

Django框架的核心包括:一个面向对象的映射器,用作数据模型(以Python类的形式定义)和关系型数据库间的介质;一个基于正则表达式的URL分发器;一个视图系统,用于处理请求;一个模板系统。

如何创建一个Django网站

本文演示如何创建一个简单的 django 网站,使用的 django 版本为1.7。

1. 创建项目

运行下面命令就可以创建一个 django 项目,项目名称叫 mysite :

$ django-admin.py startproject mysite

创建后的项目目录如下:

mysite

├── manage.py

└── mysite

├── __init__.py

├── settings.py

├── urls.py

└── wsgi.py

1 directory, 5 files

说明:

__init__.py :让 Python 把该目录当成一个开发包 (即一组模块)所需的文件。 这是一个空文件,一般你不需要修改它。

manage.py :一种命令行工具,允许你以多种方式与该 Django 项目进行交互。 键入python manage.py help,看一下它能做什么。 你应当不需要编辑这个文件;在这个目录下生成它纯是为了方便。

settings.py :该 Django 项目的设置或配置。

urls.py:Django项目的URL路由设置。目前,它是空的。

wsgi.py:WSGI web 应用服务器的配置文件。更多细节,查看 How to deploy with WSGI

接下来,你可以修改 settings.py 文件,例如:修改 LANGUAGE_CODE、设置时区 TIME_ZONE

SITE_ID = 1

LANGUAGE_CODE = 'zh_CN'

TIME_ZONE = 'Asia/Shanghai'

USE_TZ = True

上面开启了 [Time zone]() 特性,需要安装 pytz:

$ sudo pip install pytz

2. 运行项目

在运行项目之前,我们需要创建数据库和表结构,这里我使用的默认数据库:

$ python manage.py migrate

Operations to perform:

Apply all migrations: admin, contenttypes, auth, sessions

Running migrations:

Applying contenttypes.0001_initial... OK

Applying auth.0001_initial... OK

Applying admin.0001_initial... OK

Applying sessions.0001_initial... OK

然后启动服务:

$ python manage.py runserver

你会看到下面的输出:

Performing system checks...

System check identified no issues (0 silenced).

January 28, 2015 - 02:08:33

Django version 1.7.1, using settings 'mysite.settings'

Starting development server at

Quit the server with CONTROL-C.

这将会在端口8000启动一个本地服务器, 并且只能从你的这台电脑连接和访问。 既然服务器已经运行起来了,现在用网页浏览器访问 。你应该可以看到一个令人赏心悦目的淡蓝色 Django 欢迎页面它开始工作了。

你也可以指定启动端口:

$ python manage.py runserver 8080

以及指定 ip:

$ python manage.py runserver 0.0.0.0:8000

3. 创建 app

前面创建了一个项目并且成功运行,现在来创建一个 app,一个 app 相当于项目的一个子模块。

在项目目录下创建一个 app:

$ python manage.py startapp polls

如果操作成功,你会在 mysite 文件夹下看到已经多了一个叫 polls 的文件夹,目录结构如下:

polls

├── __init__.py

├── admin.py

├── migrations

│ └── __init__.py

├── models.py

├── tests.py

└── views.py

1 directory, 6 files

4. 创建模型

每一个 Django Model 都继承自 django.db.models.Model

在 Model 当中每一个属性 attribute 都代表一个 database field

通过 Django Model API 可以执行数据库的增删改查, 而不需要写一些数据库的查询语句

打开 polls 文件夹下的 models.py 文件。创建两个模型:

import datetime

from django.db import models

from django.utils import timezone

class Question(models.Model):

question_text = models.CharField(max_length=200)

pub_date = models.DateTimeField('date published')

def was_published_recently(self):

return self.pub_date = timezone.now() - datetime.timedelta(days=1)

class Choice(models.Model):

question = models.ForeignKey(Question)

choice_text = models.CharField(max_length=200)

votes = models.IntegerField(default=0)

然后在 mysite/settings.py 中修改 INSTALLED_APPS 添加 polls:

INSTALLED_APPS = (

'django.contrib.admin',

'django.contrib.auth',

'django.contrib.contenttypes',

'django.contrib.sessions',

'django.contrib.messages',

'django.contrib.staticfiles',

'polls',

)

在添加了新的 app 之后,我们需要运行下面命令告诉 Django 你的模型做了改变,需要迁移数据库:

$ python manage.py makemigrations polls

你会看到下面的输出日志:

Migrations for 'polls':

0001_initial.py:

- Create model Choice

- Create model Question

- Add field question to choice

你可以从 polls/migrations/0001_initial.py 查看迁移语句。

运行下面语句,你可以查看迁移的 sql 语句:

$ python manage.py sqlmigrate polls 0001

输出结果:

BEGIN;

CREATE TABLE "polls_choice" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "choice_text" varchar(200) NOT NULL, "votes" integer NOT NULL);

CREATE TABLE "polls_question" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "question_text" varchar(200) NOT NULL, "pub_date" datetime NOT NULL);

CREATE TABLE "polls_choice__new" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "choice_text" varchar(200) NOT NULL, "votes" integer NOT NULL, "question_id" integer NOT NULL REFERENCES "polls_question" ("id"));

INSERT INTO "polls_choice__new" ("choice_text", "votes", "id") SELECT "choice_text", "votes", "id" FROM "polls_choice";

DROP TABLE "polls_choice";

ALTER TABLE "polls_choice__new" RENAME TO "polls_choice";

CREATE INDEX polls_choice_7aa0f6ee ON "polls_choice" ("question_id");

COMMIT;

你可以运行下面命令,来检查数据库是否有问题:

$ python manage.py check

再次运行下面的命令,来创建新添加的模型:

$ python manage.py migrate

Operations to perform:

Apply all migrations: admin, contenttypes, polls, auth, sessions

Running migrations:

Applying polls.0001_initial... OK

总结一下,当修改一个模型时,需要做以下几个步骤:

修改 models.py 文件

运行 python manage.py makemigrations 创建迁移语句

运行 python manage.py migrate,将模型的改变迁移到数据库中

你可以阅读 django-admin.py documentation,查看更多 manage.py 的用法。

创建了模型之后,我们可以通过 Django 提供的 API 来做测试。运行下面命令可以进入到 python shell 的交互模式:

$ python manage.py shell

下面是一些测试:

from polls.models import Question, Choice # Import the model classes we just wrote.

# No questions are in the system yet.

Question.objects.all()

[]

# Create a new Question.

# Support for time zones is enabled in the default settings file, so

# Django expects a datetime with tzinfo for pub_date. Use timezone.now()

# instead of datetime.datetime.now() and it will do the right thing.

from django.utils import timezone

q = Question(question_text="What's new?", pub_date=timezone.now())

# Save the object into the database. You have to call save() explicitly.

q.save()

# Now it has an ID. Note that this might say "1L" instead of "1", depending

# on which database you're using. That's no biggie; it just means your

# database backend prefers to return integers as Python long integer

# objects.

q.id

1

# Access model field values via Python attributes.

q.question_text

"What's new?"

q.pub_date

datetime.datetime(2012, 2, 26, 13, 0, 0, 775217, tzinfo=UTC)

# Change values by changing the attributes, then calling save().

q.question_text = "What's up?"

q.save()

# objects.all() displays all the questions in the database.

Question.objects.all()

[Question: Question object]

打印所有的 Question 时,输出的结果是 [Question: Question object],我们可以修改模型类,使其输出更为易懂的描述。修改模型类:

from django.db import models

class Question(models.Model):

# ...

def __str__(self): # __unicode__ on Python 2

return self.question_text

class Choice(models.Model):

# ...

def __str__(self): # __unicode__ on Python 2

return self.choice_text

接下来继续测试:

from polls.models import Question, Choice

# Make sure our __str__() addition worked.

Question.objects.all()

[Question: What's up?]

# Django provides a rich database lookup API that's entirely driven by

# keyword arguments.

Question.objects.filter(id=1)

[Question: What's up?]

Question.objects.filter(question_text__startswith='What')

[Question: What's up?]

# Get the question that was published this year.

from django.utils import timezone

current_year = timezone.now().year

Question.objects.get(pub_date__year=current_year)

Question: What's up?

# Request an ID that doesn't exist, this will raise an exception.

Question.objects.get(id=2)

Traceback (most recent call last):

...

DoesNotExist: Question matching query does not exist.

# Lookup by a primary key is the most common case, so Django provides a

# shortcut for primary-key exact lookups.

# The following is identical to Question.objects.get(id=1).

Question.objects.get(pk=1)

Question: What's up?

# Make sure our custom method worked.

q = Question.objects.get(pk=1)

# Give the Question a couple of Choices. The create call constructs a new

# Choice object, does the INSERT statement, adds the choice to the set

# of available choices and returns the new Choice object. Django creates

# a set to hold the "other side" of a ForeignKey relation

# (e.g. a question's choice) which can be accessed via the API.

q = Question.objects.get(pk=1)

# Display any choices from the related object set -- none so far.

q.choice_set.all()

[]

# Create three choices.

q.choice_set.create(choice_text='Not much', votes=0)

Choice: Not much

q.choice_set.create(choice_text='The sky', votes=0)

Choice: The sky

c = q.choice_set.create(choice_text='Just hacking again', votes=0)

# Choice objects have API access to their related Question objects.

c.question

Question: What's up?

# And vice versa: Question objects get access to Choice objects.

q.choice_set.all()

[Choice: Not much, Choice: The sky, Choice: Just hacking again]

q.choice_set.count()

3

# The API automatically follows relationships as far as you need.

# Use double underscores to separate relationships.

# This works as many levels deep as you want; there's no limit.

# Find all Choices for any question whose pub_date is in this year

# (reusing the 'current_year' variable we created above).

Choice.objects.filter(question__pub_date__year=current_year)

[Choice: Not much, Choice: The sky, Choice: Just hacking again]

# Let's delete one of the choices. Use delete() for that.

c = q.choice_set.filter(choice_text__startswith='Just hacking')

c.delete()

上面这部分测试,涉及到 django orm 相关的知识,详细说明可以参考 Django中的ORM。

5. 管理 admin

Django有一个优秀的特性, 内置了Django admin后台管理界面, 方便管理者进行添加和删除网站的内容.

新建的项目系统已经为我们设置好了后台管理功能,见 mysite/settings.py:

INSTALLED_APPS = (

'django.contrib.admin', #默认添加后台管理功能

'django.contrib.auth',

'django.contrib.contenttypes',

'django.contrib.sessions',

'django.contrib.messages',

'django.contrib.staticfiles',

'mysite',

)

同时也已经添加了进入后台管理的 url, 可以在 mysite/urls.py 中查看:

url(r'^admin/', include(admin.site.urls)), #可以使用设置好的url进入网站后台

接下来我们需要创建一个管理用户来登录 admin 后台管理界面:

$ python manage.py createsuperuser

Username (leave blank to use 'june'): admin

Email address:

Password:

Password (again):

Superuser created successfully.

总结

最后,来看项目目录结构:

mysite

├── db.sqlite3

├── manage.py

├── mysite

│ ├── __init__.py

│ ├── settings.py

│ ├── urls.py

│ ├── wsgi.py

├── polls

│ ├── __init__.py

│ ├── admin.py

│ ├── migrations

│ │ ├── 0001_initial.py

│ │ ├── __init__.py

│ ├── models.py

│ ├── templates

│ │ └── polls

│ │ ├── detail.html

│ │ ├── index.html

│ │ └── results.html

│ ├── tests.py

│ ├── urls.py

│ ├── views.py

└── templates

└── admin

└── base_site.htm

通过上面的介绍,对 django 的安装、运行以及如何创建视 图和模型有了一个清晰的认识,接下来就可以深入的学习 django 的自动化测试、持久化、中间件、国 际 化等知识。

结语:以上就是首席CTO笔记为大家介绍的关于django网站用什么驱动的全部内容了,希望对大家有所帮助,如果你还想了解更多这方面的信息,记得收藏关注本站。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:/Python/33402.html