Django 是用Python开发的一个免费开源的Web框架,可以用于快速搭建高性能,优雅的网站!
Django官方网站 Django官方文档 安装Django官方文档介绍
Django是一个基于MVC构造的框架。但是在Django中,控制器接受用户输入的部分由框架自行处理,所以 Django 里更关注的是模型(Model)、模板(Template)和视图(Views),称为 MTV模式。
BSD:BSD许可证是随着加州大学伯克利分校发布BSD UNIX发展起来的,修改版本被Apple、Apache所采用。BSD协议是“宽容自由软件许可证”中的一员,在软件复用上给予了最小限度的限制。
BSD协议允许作者使用该协议下的资源,将其并入私人版本的软件,该软件可使用闭源软件协议发布。
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install python-pip
对于Python开发用户来讲,PIP安装软件包是家常便饭。但国外的源下载速度实在太慢,浪费时间,而且好多软件总是被墙,所以把PIP安装源替换成国内镜像,可以大幅提升下载速度,还可以解决被墙导致的装不上库的烦恼,提高安装成功率。网上有很多可用的源,这里推荐的是清华大学的pip源,它是官网pypi的镜像,每隔5分钟同步一次。
Linux下,修改 ~/.pip/pip.conf (没有就创建一个),按下Ctrl + H 可以看到隐藏文件,修改 index-url至tuna,内容如下:
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
4.利用pip安装 Django(推荐使用1.11版本)
(sudo)pip install Django
或者 (sudo) pip install Django==1.8.16
或者 pip install Django==1.11
检查是否安装成功
>>> import django
>>> django.VERSION
(1, 11, 'final', 0)
>>>
>>> django.get_version()
'1.11'
5.安装Rest FrameWork
pip install djangorestframework
INSTALLED_APPS = [
...
'rest_framework', #配置 rest_framework app
...
]
tar zvxf jdk-8u131-linux-x64.tar.gz
sudo mkdir /usr/lib/jvm
sudo mv jdk1.8.0_131/ /usr/lib/jvm/
注意:如果没有jvm文件,执行该语句虽然会自动创建jvm文件,但只会把jdk1.8.0_25里面的文件都放到jvm中,而不是把jdk1.8.0_25及其里面的文件放到jvm文件中,两者是有区别的sudo vim ~/.profile
编辑:export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_131
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
source ~/.profile
java -version
为了实现可以从windows拖拽文件到ubuntu,可以安装VMware Tools。
django-admin.py startproject project_name
特别是在 windows 上,如果报错,尝试用 django-admin 代替 django-admin.py 试试
注意 project_name 是自己的项目名称,需要为合法的 Python 包名,如不能为 1a 或 a-b。
python manage.py startapp app_name
或 django-admin.py startapp app_name
一般一个项目有多个app, 当然通用的app也可以在多个项目中使用。 与项目名类似 app name 也需要为合法的 Python 包名,如 blog,news, aboutus 等都是合法的 app 名称。
Django 1.7.1及以上 用以下命令
# 1. 创建更改的文件
python manage.py makemigrations
# 2. 将生成的py文件应用到数据库
python manage.py migrate
旧版本的Django 1.6及以下用
python manage.py syncdb
这种方法可以在SQL等数据库中创建与models.py代码对应的表,不需要自己手动执行SQL。 备注:对已有的 models 进行修改,Django 1.7之前的版本的Django都是无法自动更改表结构的,不过有第三方工具 south
python manage.py runserver
# 当提示端口被占用的时候,可以用其它端口:
python manage.py runserver 8001
python manage.py runserver 9999
(当然也可以kill掉占用端口的进程)
# 监听机器所有可用 ip (电脑可能有多个内网ip或多个外网ip)
python manage.py runserver 0.0.0.0:8000
# 如果是外网或者局域网电脑上可以用其它电脑查看开发服务器
# 访问对应的 ip加端口,比如 http://172.16.20.2:8000
python manage.py flush
此命令会询问是 yes 还是 no, 选择 yes 会把数据全部清空掉,只留下空表。
python manage.py createsuperuser
# 按照提示输入用户名和对应的密码就好了邮箱可以留空,用户名和密码必填
# 修改 用户密码可以用:
python manage.py changepassword username
python manage.py shell
django-admin startproject zebk
备注: 如果 django-admin 不行,请用 django-admin.py
python manage.py startapp zhong # zhong 是一个app的名称
把我们新定义的app加到settings.py中的INSTALL_APPS中 修改 mysite/mysite/settings.py
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'zhong',
)
作用:新建的 app 如果不加到 INSTALL_APPS 中的话, django 就不能自动找到app中的模板文件(app-name/templates/下的文件)和静态文件(app-name/static/中的文件)
打开/zebk下的views.py文件 增加以下内容
# -*- coding: utf-8 -*-
from django.http import HttpResponse
def index(request):
return HttpResponse(u"hellow 中二病控丶!")
utf-8
, 因为我们在代码中用到了中文,如果不声明就报错.print
一样,只不过 HttpResponse
是把内容显示到网页上。index()
函数,第一个参数必须是 request,与网页发来的请求有关,request 变量里面包含get或post的内容,用户浏览器,系统等信息在里面(后面会讲,先了解一下就可以)。HttpResponse
对象,可以经过一些处理,最终显示几个字到网页上。# mysite/urls.py
from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
url(r'^zhong/', include('zhong.urls')),
url(r'^admin/', admin.site.urls),
]
2.在zhong中创建urls.py,编写如下:
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.index, name='index'),
]
然后在终端上运行 python manage.py runserver 我们会看到类似下面的信息:
python manage.py runserver
Performing system checks...
System check identified no issues (0 silenced).
You have unapplied migrations; your app may not work properly until they are applied.
Run 'python manage.py migrate' to apply them.
December 22, 2015 - 11:57:33
Django version 1.9, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
打开网页,输入127.0.0.1:8000/zhong/
创建一个管理员用户
python manage.py createsuperuser,按提示输入用户名、邮箱、密码
LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'
from django.contrib import admin
from models import BookInfo
admin.site.register(BookInfo)
class QuestionAdmin(admin.ModelAdmin):
...
admin.site.register(Question, QuestionAdmin)
list_display = ['pk', 'btitle', 'bpub_date']
list_filter = ['btitle']
search_fields = ['btitle']
list_per_page = 10
fields = ['bpub_date', 'btitle']
fieldsets = [
('basic',{'fields': ['btitle']}),
('more', {'fields': ['bpub_date']}),
]
from django.contrib import admin
from models import BookInfo,HeroInfo
class HeroInfoInline(admin.StackedInline):
model = HeroInfo
extra = 2
class BookInfoAdmin(admin.ModelAdmin):
inlines = [HeroInfoInline]
admin.site.register(BookInfo, BookInfoAdmin)
class HeroInfoInline(admin.TabularInline)
def gender(self):
if self.hgender:
return '男'
else:
return '女'
gender.short_description = '性别'
在admin注册中使用gender代替hgender
class HeroInfoAdmin(admin.ModelAdmin):
list_display = ['id', 'hname', 'gender', 'hcontent']
了解了下Django的社交用户系统的包 django-allauth,django-allauth是集成了local用户系统和social用户系统,其social用户系统可以挂载多个账户。也是一个流行度非常高的Django user系统。
pip install django-allauth
TEMPLATE_CONTEXT_PROCESSORS = (
"django.contrib.auth.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
"django.core.context_processors.media",
"django.core.context_processors.static",
"django.core.context_processors.tz",
#"django.contrib.messages.context_processors.messages"
# Required by allauth template tags
"django.core.context_processors.request",
# allauth specific context processors
"allauth.account.context_processors.account",
"allauth.socialaccount.context_processors.socialaccount",
)
AUTHENTICATION_BACKENDS = (
# Needed to login by username in Django admin, regardless of `allauth`
"django.contrib.auth.backends.ModelBackend",
# `allauth` specific authentication methods, such as login by e-mail
"allauth.account.auth_backends.AuthenticationBackend",
)
INSTALLED_APPS = (
...
# The Django sites framework is required
'django.contrib.sites',
'allauth',
'allauth.account',
'allauth.socialaccount',
# ... include the providers you want to enable:
'allauth.socialaccount.providers.amazon',
'allauth.socialaccount.providers.angellist',
'allauth.socialaccount.providers.bitbucket',
'allauth.socialaccount.providers.bitly',
'allauth.socialaccount.providers.coinbase',
'allauth.socialaccount.providers.dropbox',
'allauth.socialaccount.providers.facebook',
'allauth.socialaccount.providers.flickr',
'allauth.socialaccount.providers.feedly',
'allauth.socialaccount.providers.github',
'allauth.socialaccount.providers.google',
'allauth.socialaccount.providers.hubic',
'allauth.socialaccount.providers.instagram',
'allauth.socialaccount.providers.linkedin',
'allauth.socialaccount.providers.linkedin_oauth2',
'allauth.socialaccount.providers.openid',
'allauth.socialaccount.providers.persona',
'allauth.socialaccount.providers.soundcloud',
'allauth.socialaccount.providers.stackexchange',
'allauth.socialaccount.providers.tumblr',
'allauth.socialaccount.providers.twitch',
'allauth.socialaccount.providers.twitter',
'allauth.socialaccount.providers.vimeo',
'allauth.socialaccount.providers.vk',
'allauth.socialaccount.providers.weibo',
'allauth.socialaccount.providers.xing',
...
)
urlpatterns = patterns('',
...
(r'^accounts/', include('allauth.urls')),
...
)