赞
踩
加入清华镜像参数会快很多
-i https://pypi.tuna.tsinghua.edu.cn/simple
pip install Django -i https://pypi.tuna.tsinghua.edu.cn/simple
在开发过程中,可能因为项目众多导致包混乱或者版本冲突,所以选择虚拟环境使不同的项目隔离开。
pip install virtualenv -i https://pypi.tuna.tsinghua.edu.cn/simple
如果安装无误的话,可以直接在pycharm中搭建Django项目,pycharm会自动帮我们搭建虚拟环境。
2.1 manage.py:命令行集成工具,有助于管理项目。
2.2 settings.py:Django项目的设置和配置信息
2.3 urls.py:包含项目的所以URL信息,是用户访问Django与应用的方式
2.4 wsgi.py:是兼容WSGI的Web服务器的入口点
2.5 __init__.py:指明blog目录是一个python项目
在相应的文件路径的终端输入pip manage.py,可以查看指令集。
终端输入:pip manage.py
Type ‘manage.py help <subcommand>’ for help on a specific subcommand.
Available subcommands:
[auth]
changepassword
createsuperuser[contenttypes]
remove_stale_contenttypes[django]
check
compilemessages
createcachetable
dbshell
diffsettings
dumpdata
flush
inspectdb
loaddata
makemessages
makemigrations
migrate
sendtestemail
shell
showmigrations
sqlflush
sqlmigrate
sqlsequencereset
squashmigrations
startapp
startproject
test
testserver[sessions]
clearsessions[staticfiles]
collectstatic
findstatic
runserver
终端输入:python manage.py runserver
Watching for file changes with StatReloader
Performing system checks…System check identified no issues (0 silenced).
You have 17 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. January 24,
2021 - 13:19:23 Django version 3.0.11, using settings ‘blog.settings’
Starting development server at http://127.0.0.1:8000/ Quit the server
with CTRL-BREAK. [24/Jan/2021 13:19:41] “GET / HTTP/1.1” 200 16351
[24/Jan/2021 13:19:41] “GET /static/admin/css/fonts.css HTTP/1.1” 200
423 [24/Jan/2021 13:19:41] “GET
/static/admin/fonts/Roboto-Regular-webfont.woff HTTP/1.1” 200 85876
[24/Jan/2021 13:19:41] “GET
/static/admin/fonts/Roboto-Light-webfont.woff HTTP/1.1” 200 85692 Not
Found: /favicon.ico [24/Jan/2021 13:19:41] “GET /favicon.ico HTTP/1.1”
404 1970 [24/Jan/2021 13:19:41] “GET
/static/admin/fonts/Roboto-Bold-webfont.woff HTTP/1.1” 200 86184
这样一个简单的Django项目就完成了
终端输入:python manage.py migrate
返回:
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial… OK
Applying auth.0001_initial… OK
Applying admin.0001_initial… OK
Applying admin.0002_logentry_remove_auto_add… OK
Applying admin.0003_logentry_add_action_flag_choices… OK
Applying contenttypes.0002_remove_content_type_name… OK
Applying auth.0002_alter_permission_name_max_length… OK
Applying auth.0003_alter_user_email_max_length… OK
Applying auth.0004_alter_user_username_opts… OK
Applying auth.0005_alter_user_last_login_null… OK
Applying auth.0006_require_contenttypes_0002… OK
Applying auth.0007_alter_validators_add_error_messages… OK
Applying auth.0008_alter_user_username_max_length… OK
Applying auth.0009_alter_user_last_name_max_length… OK
Applying auth.0010_alter_group_name_max_length… OK
Applying auth.0011_update_proxy_permissions… OK
Applying sessions.0001_initial… OK
Traceback (most recent call last):
File “D:\Develop\virtualenv\envname\blog\manage.py”, line 22, in
main()
File “D:\Develop\virtualenv\envname\blog\manage.py”, line 18, in main
execute_from_command_line(sys.argv)
File “D:\Develop\python\lib\site-packages\django-3.0.11-py3.9.egg\django\core\management_init_.py”, line 401, in execute_from_command_line
utility.execute()
File “D:\Develop\python\lib\site-packages\django-3.0.11-py3.9.egg\django\core\management_init_.py”, line 395, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File “D:\Develop\python\lib\site-packages\django-3.0.11-py3.9.egg\django\core\management\base.py”, line 341, in run_from_argv
connections.close_all()
File “D:\Develop\python\lib\site-packages\django-3.0.11-py3.9.egg\django\db\utils.py”, line 230, in close_all
connection.close()
File “D:\Develop\python\lib\site-packages\django-3.0.11-py3.9.egg\django\utils\asyncio.py”, line 26, in inner
return func(*args, **kwargs)
File “D:\Develop\python\lib\site-packages\django-3.0.11-py3.9.egg\django\db\backends\sqlite3\base.py”, line 261, in close
if not self.is_in_memory_db():
File “D:\Develop\python\lib\site-packages\django-3.0.11-py3.9.egg\django\db\backends\sqlite3\base.py”, line 380, in is_in_memory_db
return self.creation.is_in_memory_db(self.settings_dict[‘NAME’])
File “D:\Develop\python\lib\site-packages\django-3.0.11-py3.9.egg\django\db\backends\sqlite3\creation.py”, line 12, in is_in_memory_db
return database_name == ‘:memory:’ or ‘mode=memory’ in database_name
TypeError: argument of type ‘WindowsPath’ is not iterable
创建成功:
一个Django网站可能包含多个Django应用,可以使用manage.py创建。
终端输入:python manage.py startapp news
这样就生成了一个news应用。
在views.py中书写相要的试图。
from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
def index(request):
return HttpResponse("Hello World")
在news目录中创建一个新的urls.py文件,并编写代码。
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.index, name='index')
]
编辑blog/urls.py.。
"""blog URL Configuration The `urlpatterns` list routes URLs to views. For more information please see: https://docs.djangoproject.com/en/3.1/topics/http/urls/ Examples: Function views 1. Add an import: from my_app import views 2. Add a URL to urlpatterns: path('', views.home, name='home') Class-based views 1. Add an import: from other_app.views import Home 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') Including another URLconf 1. Import the include() function: from django.urls import include, path 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) """ from django.contrib import admin from django.urls import path from django.conf.urls import include,url from django.contrib import admin urlpatterns = [ path('admin/', admin.site.urls), url(r'^news/',include('news.urls')), ]
终端输入:python manage.py runserver
访问http://127.0.0.1:8000/news/,成功如图。
from django.db import models
# Create your models here.
class Post(models.Model):
title = models.CharField(max_length=20)
content = models.CharField(max_length=20)
publish_date = models.DateTimeField('date published')
应用news对应的配置类是NewsConfig,位于news/app.py中,因此索引路径是news.apps.NewsConfig,将其添加到blog/setting.py中
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'news.apps.NewsConfig',
]
终端输入:python manage.py makemigrations news
返回:
Migrations for ‘news’:
news\migrations\0001_initial.py
- Create model Post
生成:
终端输入:python manage.py sqlmigrate news 0001
–
– Create model Post
–
CREATE TABLE “news_post” (
“id” integer NOT NULL PRIMARY KEY AUTOINCREMENT,
“title” varchar(20) NOT NULL, “content” varchar(20) NOT NULL,
“publish_date” datetime NOT NULL);
终端输入:python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, news, sessions
Running migrations:
Applying news.0001_initial… OK
1.创建账户,输入相应信息
终端输入:python manage.py createsuperuser
Username (leave blank to use ‘yh’): admin
Email address: 10791894@qq.com
Password:
Password (again):
Superuser created successfully.
python manage.py runserver
访问http://127.0.0.1:8000/admin/login/?next=/admin/
在news/admin.py中编辑代码
from django.contrib import admin
from .models import Post
# Register your models here.
admin.site.register(Post)
启动服务
python manage.py runserver
再次访问http://127.0.0.1:8000/admin/login/?next=/admin/,登陆后可以查看到post已经加入进去。
添加了几条post后发现显示的全是project,添加一下__str__方法即可
from django.db import models
# Create your models here.
class Post(models.Model):
title = models.CharField(max_length=20)
content = models.CharField(max_length=20)
publish_date = models.DateTimeField('date published')
def __str__(self):
return self.title
重新启动服务就变得可视化了
现在news项目已经有了数据和管理后台,下面做个页面将其展示出来
from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
def index(request):
return HttpResponse("Hello World")
def detail(request, post_id):
return HttpResponse("You are looking at post {}".format(post_id))
from django.conf.urls import url
from django.contrib import admin
from . import views
urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'^(?P<post_id>[0-9]+)/$', views.detail, name='datail')
]
from django.shortcuts import render from django.http import HttpResponse from .models import Post # Create your views here. def index(request): latest_post_list = Post.objects.order_by('-publish_date')[:5] output = ', '.join([p.title for p in latest_post_list]) return HttpResponse(output) def detail(request, post_id): return HttpResponse("You are looking at post {}".format(post_id))
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。