Django startproject startapp


 

Django startproject

1. django-admin  command  help

d:\django_study>django-admin --help

Type 'django-admin help <subcommand>' for help on a specific subcommand.

Available subcommands:

[django]
check
compilemessages
createcachetable
dbshell
diffsettings
dumpdata
flush
inspectdb
loaddata
makemessages
makemigrations
migrate
runserver
sendtestemail
shell
showmigrations
sqlflush
sqlmigrate
sqlsequencereset
squashmigrations
startapp
startproject
test
testserver
Note that only Django core commands are listed as settings are not properly configured (error: Requested setting INSTALLED_APPS, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.).

2. django-admin startproject djangosite  #djangosite 是项目名称

3. 生成项目之后,会生成文件夹 djangosite, djangosite 下包含一个子文件夹 djangosite 和 一个 manage.py 文件

d:\django_study\djangosite 的目录

2017/12/30 20:12 <DIR> .
2017/12/30 20:12 <DIR> ..
2017/12/30 20:12 <DIR> djangosite
2017/12/30 20:12 830 manage.py
1 个文件 830 字节
3 个目录 105,486,389,248 可用字节

 

4.  创建project之后,就可以运行sever来检验一下了:    

d:\django_study\djangosite>python manage.py runserver
Performing system checks...

System check identified no issues (0 silenced).

You have 13 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
December 30, 2017 - 20:13:07
Django version 1.11.4, using settings 'djangosite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.

注意: 

You have 13 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.

之所以有这个提示,是因为默认设置里面会有应用: admin, auth, contenttypes, sessions , 这些应用包含model,这些model已经有了对应的migrations,可以参加django 源码:

 

 可以看到这里已经有了migrations,所以才会有这个提示,如果把设置里有关这些应用的设置删除,就不会再出现这个提示,一般情况下,我们都会用到这些应用,所以不会删除这些设置,等做完第一次migrate之后,就不会再有这个提示了。

 

5. 访问server,打开地址 http://127.0.0.1:8000/, 会出现 It worked! , 说明项目创建成功,接下来就可以创建 应用了

注意:

虽然默认会配置 admin的试图,但是这个时候因为没有migrate,没有对应的数据,访问 http://127.0.0.1:8000/admin会报错:

 

Note:  此时你很可能会看到log里面打印: 

"GET /favicon.ico HTTP/1.1" 404

这是因为默认情况下,浏览器访问一个网站的时候,同时还会向服务器请求“/favicon.ico”这个URL,目的是获取网站的图标。默认情况下,Django会返回404错误的,浏览器接收到这个404错误后,也无伤大雅,因为没有图标就用默认的图标,所以这个错误也没有跟通常的404错误一样在网页上显示出来。

不过我们还是应该给网站配置一个图标,这样用户体验会更好一些。

配置favicon.ico文件,可以在url.py文件中这样配置:

# favicon.cio

url(r'^favicon\.ico$', 'django.views.generic.simple.redirect_to', {'url': '/static/images/favicon.ico'}),

 不过这个有个前提是在Django中,配置静态文件的支持。

然后在static/images目录下放一个名为favicon.ico的图片就大功告成了。

 

6. 创建应用

下面创建了一个名为app的应用

d:\django_study\djangosite>python manage.py startapp app

d:\django_study\djangosite>dir
驱动器 D 中的卷没有标签。
卷的序列号是 10C5-F5F6

d:\django_study\djangosite 的目录

2017/12/30 23:37 <DIR> .
2017/12/30 23:37 <DIR> ..
2017/12/30 23:36 <DIR> .idea
2017/12/30 23:37 <DIR> app
2017/12/30 20:13 3,072 db.sqlite3
2017/12/30 22:00 <DIR> djangosite
2017/12/30 20:12 830 manage.py
2 个文件 3,902 字节
5 个目录 105,486,344,192 可用字节

 创建之后,会生成一个名为app的文件夹

d:\django_study\djangosite\app 的目录

2017/12/30 23:37 <DIR> .
2017/12/30 23:37 <DIR> ..
2017/12/30 23:37 134 admin.py
2017/12/30 23:37 154 apps.py
2017/12/30 23:37 <DIR> migrations
2017/12/30 23:37 128 models.py
2017/12/30 23:37 131 tests.py
2017/12/30 23:37 134 views.py
2017/12/30 23:37 0 __init__.py
6 个文件 681 字节
3 个目录 105,486,344,192 可用字节

 

下面的文件名默认是一致的(就是对所有的应用,默认名称是一样的),如果要修改,需要手动修改

a. admin.py:  管理站点模型的声明文件,默认为空,可以在此文件中注册需要在管理页面管理(增加,删除,修改,查看)的模型

b. apps.py:  应用信息定义文件,在其中生成了类 AppConfig, 该类用于定义应用名等 meta 数据

c. migrations包: 用于在之后定义应用迁移功能

d. models.py:  添加模型类的文件

e.tests.py:  单元测试文件

f. views.py: 视图函数定义文件,用来响应URL请求

 

以上文件生成的时候,没有实际内容,需要编码来实现具体功能。

 

一个项目中可以创建多个应用,比如再创建一个名为 petstore 的应用:

d:\django_study\djangosite>python manage.py startapp petstore

d:\django_study\djangosite 的目录

2018/01/01 18:36 <DIR> .
2018/01/01 18:36 <DIR> ..
2018/01/01 18:06 <DIR> .idea
2017/12/30 23:37 <DIR> app
2017/12/30 20:13 3,072 db.sqlite3
2017/12/30 22:00 <DIR> djangosite
2017/12/30 20:12 830 manage.py
2018/01/01 18:36 <DIR> petstore
2 个文件 3,902 字节
6 个目录 105,486,327,808 可用字节

d:\django_study\djangosite>dir petstore
驱动器 D 中的卷没有标签。
卷的序列号是 10C5-F5F6

d:\django_study\djangosite\petstore 的目录

2018/01/01 18:36 <DIR> .
2018/01/01 18:36 <DIR> ..
2018/01/01 18:36 134 admin.py
2018/01/01 18:36 164 apps.py
2018/01/01 18:36 <DIR> migrations
2018/01/01 18:36 128 models.py
2018/01/01 18:36 131 tests.py
2018/01/01 18:36 134 views.py
2018/01/01 18:36 0 __init__.py
6 个文件 691 字节
3 个目录 105,486,327,808 可用字节

 

7.  函数   django.conf.urls.url 和 django.conf.urls.include

   

   函数  django.conf.urls.url 用来根据参数 创建以下类对象, 要么是 

RegexURLPattern, 要么是  RegexURLResolver

   当参数 view 是可调用函数时, 创建  RegexURLPattern 对象, 如果是 list/tuple, 则创建  RegexURLResolver 对象, 

 

    函数  django.conf.urls.include 用来根据参数生成一个tuple,来供url函数创建   RegexURLResolver 对象,这也是为什么 既可以写成

     url(r'^admin/',  admin.site.urls),  又可以写成   url(r'^admin/', include(admin.site.urls)),  的原因, 因为 admin.site.urls 本身是一个tuple, 经过include之后仍然是一个tuple,而且tuple内容没变,所以两者都可以,但  url(r'^admin/', include(admin.site.urls))  是老式写法,更推荐用 url(r'^admin/',  admin.site.urls)

 

8.   INSTALLED_APPS  和   MIDDLEWARE

      如果要用到某一个应用的model,就需要在settings的INSTALLED_APPS添加这个应用?

     

 

about static files:

settings中关于静态文件(css,js,img...)的路径配置是STATIC_URL & STATIC_ROOT & STATICFILES_DIRS, STATIC_URL是关于app,STATIC_ROOT是关于project的:

STATIC_URL:   是app的静态文件路径,比如项目里一个app名字为blog,如果设置

STATIC_URL = '/static/'

则这个app里的静态文件路径就是类似 http://xxx/blog/static/yy.css, 对应的app里的静态文件要放在这个文件夹下,不然访问不到,这个文件要自己创建。

STATIC_URL 对应于模板中的tag: static, 比如:
{% load static %} <img src="{% static "images/hi.jpg" %}" alt="Hi!" />
这里static 就是STATIC_URL的值
注意: 因为django提供的app,比如admin app(后台管理)的static文件都是放在app下的static文件夹里,比如 C:\Python27\Lib\site-packages\django\contrib\admin\static, 所以
STATIC_URL = '/static/' 不要改成别的,不然会访问不到admin app的静态文件。


STATIC_ROOT:  是一个项目的静态文件路径, 一把指定为项目路径下的一个文件夹,比如staticfiles,   

STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

这个文件夹开始时不存在,在执行命令 python manage collectstatic 之后,就会创建这个文件夹,并把项目里所有app里的静态文件copy到这个文件夹。

 

d:\django_by_example\mysite>python manage.py collectstatic
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\css\base.css'
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\css\changelists.css'
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\css\dashboard.css'
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\css\fonts.css'
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\css\forms.css'
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\css\login.css'
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\css\rtl.css'
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\css\widgets.css'
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\fonts\LICENSE.txt'
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\fonts\README.txt'
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\fonts\Roboto-Bold-webfont.woff'
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\fonts\Roboto-Light-webfont.woff'
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\fonts\Roboto-Regular-webfont.woff'
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\img\calendar-icons.svg'
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\img\icon-addlink.svg'
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\img\icon-alert.svg'
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\img\icon-calendar.svg'
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\img\icon-changelink.svg'
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\img\icon-clock.svg'
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\img\icon-deletelink.svg'
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\img\icon-no.svg'
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\img\icon-unknown-alt.svg'
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\img\icon-unknown.svg'
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\img\icon-yes.svg'
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\img\inline-delete.svg'
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\img\LICENSE'
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\img\README.txt'
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\img\search.svg'
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\img\selector-icons.svg'
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\img\sorting-icons.svg'
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\img\tooltag-add.svg'
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\img\tooltag-arrowright.svg'
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\img\gis\move_vertex_off.svg'
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\img\gis\move_vertex_on.svg'
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\js\actions.js'
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\js\actions.min.js'
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\js\calendar.js'
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\js\cancel.js'
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\js\change_form.js'
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\js\collapse.js'
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\js\collapse.min.js'
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\js\core.js'
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\js\inlines.js'
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\js\inlines.min.js'
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\js\jquery.init.js'
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\js\popup_response.js'
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\js\prepopulate.js'
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\js\prepopulate.min.js'
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\js\prepopulate_init.js'
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\js\SelectBox.js'
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\js\SelectFilter2.js'
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\js\timeparse.js'
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\js\urlify.js'
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\js\admin\DateTimeShortcuts.js'
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\js\admin\RelatedObjectLookups.js'
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\js\vendor\jquery\jquery.js'
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\js\vendor\jquery\jquery.min.js'
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\js\vendor\jquery\LICENSE-JQUERY.txt'
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\js\vendor\xregexp\LICENSE-XREGEXP.txt'
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\js\vendor\xregexp\xregexp.js'
Copying 'C:\Python27\lib\site-packages\django\contrib\admin\static\admin\js\vendor\xregexp\xregexp.min.js'

61 static files copied to 'd:\django_by_example\mysite\staticfiles'.

 

about ALLOWED_HOSTS

A list of strings representing the host/domain names that this Django site can serve. This is a security measure to prevent HTTP Host header attacks, which are possible even under many seemingly-safe web server configurations.

Values in this list can be fully qualified names (e.g. 'www.example.com'), in which case they will be matched against the request’s Host header exactly (case-insensitive, not including port). A value beginning with a period can be used as a subdomain wildcard: '.example.com' will match example.comwww.example.com, and any other subdomain ofexample.com. A value of '*' will match anything; in this case you are responsible to provide your own validation of the Host header (perhaps in a middleware; if so this middleware must be listed first in MIDDLEWARE).

When DEBUG is True and ALLOWED_HOSTS is empty, the host is validated against ['localhost', '127.0.0.1','[::1]'].

This validation only applies via get_host(); if your code accesses the Host header directly from request.META you are bypassing this security protection.

ALLOWED_HOSTS:  用来设置这个django项目服务要放在什么地址的服务器上,比如 ['192.168.1.101', '127.0.0.1', 'www.myblog.com'], 则可以通过这三个地址访问这个django服务,
比如可能在局域网中,直接访问 http://192.168.1.101:8000,
在本机,直接访问 http://127.0.0.1:8000(如果 ALLOWED_HOSTS中没有127.0.0.1,在本机也是无法通过127.0.0.1访问的,也要通过http://192.168.1.101:8000 访问),
在外网通过 www.myblog.com:8000访问

ALLOWED_HOSTS =['192.168.1.101', '127.0.0.1', 'www.myblog.com']\

问题: 在DEBUG=False时,admin app不能访问静态文件,如下:

[08/Feb/2018 15:50:00] "GET /admin/login/?next=/admin/ HTTP/1.1" 200 1650
[08/Feb/2018 15:50:00] "GET /static/admin/css/base.css HTTP/1.1" 404 99
[08/Feb/2018 15:50:00] "GET /static/admin/css/login.css HTTP/1.1" 404 100
[08/Feb/2018 15:50:02] "GET /admin/login/?next=/admin/ HTTP/1.1" 200 1650
[08/Feb/2018 15:50:02] "GET /static/admin/css/base.css HTTP/1.1" 404 99
[08/Feb/2018 15:50:02] "GET /static/admin/css/login.css HTTP/1.1" 404 100
[08/Feb/2018 15:50:02] "GET /admin/login/?next=/admin/ HTTP/1.1" 200 1650
[08/Feb/2018 15:50:02] "GET /static/admin/css/base.css HTTP/1.1" 404 99
[08/Feb/2018 15:50:02] "GET /static/admin/css/login.css HTTP/1.1" 404 100

 

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM