导读:很多朋友问到关于django如何的相关问题,本文首席CTO笔记就来为大家做个详细解答,供大家参考,希望对大家有所帮助!一起来看看吧!
django怎么安装
Django本质上是Python语言的一个类库,所以我们可以通过pip工具进行安装(pip工具是Python安装是默认会安装的组件之一)。
打开cmd,运行“ pip install django ”,会自动安装PyPi提供的最新版本,如果指定版本可以使用“ pip install django==版本号 ”的形式进行安装。安装完毕后会出现“ Successfully installed ... ”的提示。在Python交互环境中使用“ pip list ”命令查看是否存在Django模块。或者是使用下示命令查看Django版本信息。
import django
print(django.get_version())
Python中Django如何使用?
django1.9.5python3.4.4
文件结构
在一个爬虫脚本中将爬取的数据通过django自带的model保存到数据库
修改的文件(其余pycharm新建Django项目生成,未修改):
# testapp/models.pyfrom django.db import models class Problem(models.Model): title = models.CharField(max_length=100, default=\"\") author = models.CharField(max_length=100, default=\"\") def __str__(self): return self.title pass# testapp/spider.pyimport osimport sysimport django pathname = os.path.dirname(os.path.abspath(__file__))sys.path.insert(0, pathname)sys.path.insert(0, os.path.abspath(os.path.join(pathname, \'..\')))os.environ.setdefault(\"DJANGO_SETTINGS_MODULE\", \"testproject.settings\") django.setup() from testapp.models import Problem if __name__ == \"__main__\": p = Problem(title=\"hi\", author=\"hi\") p.save() pass# testproject/setting.py......INSTALLED_APPS = [ \'django.contrib.admin\', \'django.contrib.auth\', \'django.contrib.contenttypes\', \'django.contrib.sessions\', \'django.contrib.messages\', \'django.contrib.staticfiles\', # 添加应用 \'testapp\',]......# testapp/admin.py 在后台管理界面注册 Problemfrom django.contrib import admin # Register your models here. from testapp.models import Problemadmin.site.register(Problem)
运行spider.py,添加一条实例记录
运行Django项目, 创建管理员账号, 后台管理界面查看结果
如何使用Django创建博客?
如果您想开始写博客,又想使用功能强大的Web框架创建自己的博客,那么Django是您的最佳选择。目前该系列有14个教程,我仍在研究中,欢迎您给我更多的想法。
这些教程是:
为Django开发设置Vscode:在第一个视频中,您将学习如何在vscode文本编辑器上为Django建立开发环境。使用Django创建博客文章模型:该视频涵盖了为博客文章创建模型的所有细节,从标题,作者到标签。将富文本编辑器添加到Django项目:在这里,您将学习如何将富文本编辑器添加到表单或Django项目中的任何位置。
设计帖子页面:有关使用Bootstrap 4设计详细帖子页面的快速教程。
创建详细信息帖子类视图:您将学习如何为博客帖子创建基于类的视图,它将允许您在自定义帖子页面的管理页面上使用自定义链接显示我们在管理页面中创建的帖子。
跟踪您的Django网站的访问者数量:我们将看到如何跟踪博客文章的访问量/浏览量。我们将使用一个工具,让您知道多少访客在您看到时看到您的帖子。另外,您将能够知道他们的IP地址和他们使用的用户代理。
在Django中添加要发布的评论:在本视频中,您将看到如何在博客应用中添加评论模型。因此,读者可以向您发送评论,这将很容易执行和管理。此外,您还将看到如何将注释计数添加到视图文件。
设计博客页面-引导程序:您将设计博客页面,其中将列出博客文章和其他元素。
Django博客列表视图:在本视频中,您将看到如何在博客页面上显示博客文章,我们将介绍如何通过在帖子模型中添加另一个属性来访问每个帖子的链接。此外,您还将看到如何在边栏中显示热门帖子和帖子类别。
Django 3.1中的简单分页:此视频将仅介绍Django分页的下一个和上一个按钮。
Django搜索表单[带有Q对象的过滤器]:如何在Django博客网站中实现搜索功能
在Django中分页搜索结果:使用Bootstrap(CSS框架)创建简单的分页,然后将分页功能实现到Django搜索结果页面。
在详细信息帖子中添加类似的帖子小部件:将标记功能添加到我们的Django博客网站。
使用Django的简单用户身份验证系统:实现Django第三方应用程序,用户可以在其中注册,登录以及重设和更改密码。
如何创建一个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 的自动化测试、持久化、中间件、国 际 化等知识。
[Django] 如何在Django中使用前端工具链
Django最大的不足在于其落后的前端工具链。现在前端开发几乎必备的包管理器(例如npm,yarn)以及工程化必备的webpack工具链,Django却不支持。Django开发的工作流中,后端的包管理可以用pip,而前端的包只能手动管理。所以,我最近的工程项目中,已不再使用Django提供的前端模块,仅仅把它当作API服务器。这的确很遗憾,因为Django的template引擎也有一些易用的特性,如此抛弃,真的有点不舍。那么有没有可能结合二者的优点呢?
经过一番探索,网上给出最靠谱的答案就是利用 django-webpack-loader 和 webpack-bundle-tracker 这两个插件。其原理是 webpack-bundle-tracker 能够输出webpack的编译过程以及结果。 django-webpack-loader 插件则是Django和webpack之间的桥梁,利用上面的编译结果,自动加载webpack打包后的静态文件。
需要用webpack生成的静态文件时,就在template上面使用下面一段模板语言,能够自动完成静态文件的注入。
简单的试了试,应该能够达到我想要的效果,明天有时间再研究。
结语:以上就是首席CTO笔记为大家整理的关于django如何的相关内容解答汇总了,希望对您有所帮助!如果解决了您的问题欢迎分享给更多关注此问题的朋友喔~
以上内容为新媒号(sinv.com.cn)为大家提供!新媒号,坚持更新大家所需的互联网后端知识。希望您喜欢!
版权申明:新媒号所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流,不声明或保证其内容的正确性,如发现本站有涉嫌抄袭侵权/违法违规的内容。请发送邮件至 k2#88.com(替换@) 举报,一经查实,本站将立刻删除。