学习django
文章目录
项目中使用了django,这个之前并没有深度使用过,今天花了些时间把官方文档大概浏览了一遍,简单学习了一下,这里简单记录一下以备忘。
快速上手步骤
安装django
为了能使用django-admin
命令,先将django
安装到全局:
$ pip install Django
创建项目
$ django-admin startproject django_demo
$ cd django_demo
# 创建较干净的python virtualenv环境
$ virtualenv --no-site-packages .venv
$ source .venv/bin/activate
# 在此python virtualenv环境安装Django、mysqlclient
$ pip install Django
$ pip install mysqlclient
$ python manage.py startapp test_app
创建模型类
编辑项目的settings文件:
$ vim django_demo/settings.py
修改如下的片断:
INSTALLED_APPS = [
'test_app.apps.TestAppConfig',
......
]
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'test',
'USER': 'root',
'PASSWORD': '123456',
'HOST': '127.0.0.1',
'PORT': '3306',
}
}
TIME_ZONE = 'Asia/Shanghai'
修改模型文件:
$ vim test_app/models.py
test_app/models.py
的内容如这个文件。
根据模型文件修改数据库schema:
$ python ./manage.py makemigrations
$ python ./manage.py migrate
写模型类对应的测试用例
个人不太喜欢使用django的方案写测试用例,还是喜欢写标准的测试用例:
$ vim test_app/models_test.py
test_app/models_test.py
的内容如这个文件。
运行测试用例:
$ export PYTHONPATH=`pwd`:${PYTHONPATH}
$ python test_app/models_test.py
编写视图
编写视图文件:
$ vim test_app/views.py
test_app/views.py
的内容如这个文件。
编写模板文件:
$ vim test_app/templates/index.html
$ vim test_app/templates/detail.html
这两个文件的内容如这些文件。
配置url:
$ vim test_app/urls.py
$ vim django_demo/urls.py
主要修改了以下几点:
from test_app import views
app_name = 'test_app'
urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'^(?P<question_id>[0-9]+)/$', views.detail, name="detail")
]
url(r'^', include('test_app.urls'))
运行开发Server
$ python ./manage.py runserver
运行生产Server
$ pip install gunicorn==19.10.0
$ gunicorn -b 127.0.0.1:8000 -w 5 django_demo.wsgi
亮点
之前接触过其它语言的web开发框架,django给我印象比较深刻的是其自带的ORM框架,可参考Model相关的API。
>>> from polls.models import Question, Choice # Import the model classes we just wrote.
# No questions are in the system yet.
>>> Question.objects.all()
<QuerySet []>
# 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()
<QuerySet [<Question: Question object>]>
这个确实极大简化了操作数据库的复杂度,详情的配置文档可参考这里。
如果想直接操作SQL,方法也很简单,参考这里
另外在web开发领域,一些常见问题均有推荐的解决方案:
还是挺全面的。
DONE!
参考
文章作者 Jeremy Xu
上次更新 2019-12-29
许可协议 © Copyright 2020 Jeremy Xu