安装虚拟环境工具
yum install python-virtualenv
创建虚拟环境
virtualenv -p /usr/local/bin/python3 django3
cd django/
进入虚拟环境
source bin/activate
pip安装django
pip3 install django==1.11.7 -i https://mirrors.aliyun.com/simple
(django3) [root@golang myproject]# django-admin --version
1.11.7
创建一个django项目
django-admin startproject myproject
查看项目目录
(django3) [root@golang myproject]# tree myproject/
myproject/
├── __init__.py
├── __pycache__
│ ├── __init__.cpython-36.pyc
│ ├── settings.cpython-36.pyc
│ ├── urls.cpython-36.pyc
│ └── wsgi.cpython-36.pyc
├── settings.py
├── urls.py
└── wsgi.py
1 directory, 8 files
说明:manage.py为项目管理文件,后期的项目管理全部由这个实现。
init.py代表该文件夹是一个包,可以用import导入。
settings.py项目全局设置。
urls.py路由器。
wsgi.py wsgi全称web service gateway interface,初期没什么用,项目上线的时候用,部署用。
设置访问权限
(django3) [root@golang myproject]# vim /opt/django3/myproject/myproject/settings.py
ALLOWED_HOSTS = ['*',]
运行项目
(django3) [root@golang myproject]# python /opt/django3/myproject/manage.py runserver 192.168.229.120:8000
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.
January 18, 2021 - 01:37:50
Django version 1.11.7, using settings 'myproject.settings'
Starting development server at http://192.168.229.120:8000/
Quit the server with CONTROL-C.
web界面访问
设置语言编码
vim /opt/django/HelloDjango/HelloDjango/settings.py
LANGUAGE_CODE = 'zh-hans'
再次访问
迁移数据库
我们看到运行代码的时候有句提示,这句提示是让迁移下数据库
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.
执行迁移
(django3) [root@golang myproject]# 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 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 sessions.0001_initial... OK
再次启动
(django3) [root@golang myproject]# python /opt/django3/myproject/manage.py runserver 192.168.229.120:8000
Performing system checks...
System check identified no issues (0 silenced).
January 18, 2021 - 02:06:21
Django version 1.11.7, using settings 'myproject.settings'
Starting development server at http://192.168.229.120:8000/
Quit the server with CONTROL-C.
admin登录界面
http://192.168.229.120:8000/admin/
自己写一个网页
修改urls.py
(django3) [root@golang myproject]# cat myproject/urls.py
"""myproject URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/1.11/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: url(r'^$', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.conf.urls import url, include
2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls'))
"""
from django.conf.urls import url
from django.contrib import admin
#新增语句
from web import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
#新增语句
url(r'^myweb/', views.myweb),
]
修改views.py
(django3) [root@golang myproject]# cat web/views.py
from django.shortcuts import render
#新增语句
from django.http import HttpResponse
# Create your views here.
#新增函数
def myweb(request):
return HttpResponse('我的web')
访问
说明:修改python代码后已经运行的django会自动重启,直接访问即可。
http://192.168.229.120:8000/myweb/
简单渲染字体
修改urls.py
(django3) [root@golang myproject]# cat myproject/urls.py
"""myproject URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/1.11/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: url(r'^$', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.conf.urls import url, include
2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls'))
"""
from django.conf.urls import url
from django.contrib import admin
#新增语句
from web import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^myweb/', views.myweb),
#新增语句
url(r'^myweb2/', views.myweb2),
]
修改views.py
(django3) [root@golang myproject]# cat web/views.py
from django.shortcuts import render
#新增语句
from django.http import HttpResponse
# Create your views here.
def myweb(request):
return HttpResponse('我的web')
#新增函数
def myweb2(request):
return HttpResponse('<h1>我的web</h1>')
访问
http://192.168.229.120:8000/myweb2/
制作复杂的html页面
写一个模板
(django3) [root@golang myproject]# mkdir /opt/django3/myproject/web/templates
(django3) [root@golang myproject]# cat /opt/django3/myproject/web/templates/index.html
<div class="header">
<h1>菜鸟教程网页测试实例</h1>
<p>创建一个页面。</p>
</div>
<div class="navbar">
<a href="#">链接</a>
<a href="#">链接</a>
<a href="#">链接</a>
<a href="#" class="right">链接</a>
</div>
<div class="row">
<div class="side">
<h2>关于我</h2>
<h5>我的照片:</h5>
<div class="fakeimg" style="height:200px;">这边插入图像</div>
<p>关于我的介绍..</p>
<h3>更多内容</h3>
<p>我的更多内容</p>
<div class="fakeimg" style="height:60px;">这边插入图像</div><br>
<div class="fakeimg" style="height:60px;">这边插入图像</div><br>
<div class="fakeimg" style="height:60px;">这边插入图像</div>
</div>
<div class="main">
<h2>标题</h2>
<h5>副标题</h5>
<div class="fakeimg" style="height:200px;">图像</div>
<p>一些文本..</p>
<p>菜鸟教程,学的不仅是技术,更是梦想!!!菜鸟教程,学的不仅是技术,更是梦想!!!菜鸟教程,学的不仅是技术,更是梦想!!!</p>
<br>
<h2>标题</h2>
<h5>副标题</h5>
<div class="fakeimg" style="height:200px;">图像</div>
<p>一些文本..</p>
<p>菜鸟教程,学的不仅是技术,更是梦想!!!菜鸟教程,学的不仅是技术,更是梦想!!!菜鸟教程,学的不仅是技术,更是梦想!!!</p>
</div>
</div>
<div class="footer">
<h2>底部内容</h2>
</div>
修改urls.py
(django3) [root@golang myproject]# cat myproject/urls.py
"""myproject URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/1.11/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: url(r'^$', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.conf.urls import url, include
2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls'))
"""
from django.conf.urls import url
from django.contrib import admin
from web import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^myweb/', views.myweb),
url(r'^myweb2/', views.myweb2),
#新增语句
url(r'^myweb3/', views.myweb3),
]
修改views.py
(django3) [root@golang myproject]# cat web/views.py
from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
def myweb(request):
return HttpResponse('我的web')
def myweb2(request):
return HttpResponse('<h1>我的web</h1>')
#新增函数
def myweb3(request):
return render(request,'index.html')
访问
http://192.168.229.120:8000/myweb3/
这是因为web没有被识别
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'web',
]
再次访问
http://192.168.229.120:8000/myweb3/
返回一个图片
改html文件
在上一节基础上直接改html文件
(django3) [root@golang images]# cat /opt/django3/myproject/web/templates/index.html
{% load static %}
<div class="main-main">
<div>
<img src="{% static 'images/test.jpg' %}" alt="">
</div>
</div>
创建图片所在目录
(django3) [root@golang myproject]# mkdir -p /opt/django3/myproject/static/images/
(django3) [root@golang myproject]# cd /opt/django3/myproject/static/images/
上传一个test.jpg的图片
(django3) [root@golang images]# ll
总用量 56
-rw-r--r--. 1 root root 56017 9月 20 2019 test.jpg
改setting.py
在最后一行增加如下代码
STATICFILES_DIRS=(
os.path.join(BASE_DIR,'static'),
)
说明:这里的BASE_DIR是在settings.py文件里定义的一个变量,原文如下
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(file)))
访问
http://192.168.229.120:8000/myweb3/
调整图片位置
改html文件
在上一节基础上直接改html文件
(django3) [root@golang myproject]# cat web/templates/index.html
<style type="text/css">
.imgdiv{
width:400px;
height:400px;
border:1px solid
}
.imgdiv img{
margin-top:20px;
padding-left:20px;
}
</style>
{% load static %}
<div class="imgdiv">
<div>
<img src="{% static 'images/test.jpg' %}" alt="">
</div>
</div>
访问
http://192.168.229.120:8000/myweb3/
可以看到,图片位置已经移动。
创建新目录
在项目myproject根目录/opt/django3/myproject下,创建一个templates目录
(django3) [root@golang myproject]# mkdir /opt/django3/myproject/templates
写html文件
(django3) [root@golang myproject]# cat /opt/django3/myproject/templates/home.html
<style type="text/css">
.imgdiv{
width:400px;
height:400px;
border:1px solid
}
.imgdiv img{
margin-top:20px;
padding-left:20px;
}
</style>
{% load static %}
<div class="imgdiv">
<div>
<img src="{% static 'images/test.jpg' %}" alt="">
</div>
</div>
修改urls.py
(django3) [root@golang myproject]# cat myproject/urls.py
"""myproject URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/1.11/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: url(r'^$', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.conf.urls import url, include
2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls'))
"""
from django.conf.urls import url
from django.contrib import admin
from web import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^myweb/', views.myweb),
url(r'^myweb2/', views.myweb2),
url(r'^myweb3/', views.myweb3),
#新增语句
url(r'^home/', views.home),
]
修改views.py
(django3) [root@golang myproject]# cat web/views.py
from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
def myweb(request):
return HttpResponse('我的web')
def myweb2(request):
return HttpResponse('<h1>我的web</h1>')
def myweb3(request):
return render(request,'index.html')
#新增函数
def home(request):
return render(request,'home.html')
访问
http://192.168.229.120:8000/home/
修改setting.py
在TEMPLATES下的DIRS下将新建的目录加上。
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
os.path.join(BASE_DIR,'templates'),
],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
再次访问
http://192.168.229.120:8000/home/
快速制作网页
复制网页代码
随便从网页上复制代码粘贴到/opt/django3/myproject/templates/home.html文件里
访问
http://192.168.229.120:8000/home/
说明:这里边的视频是不可以看的。
拆分urls
setting.py中设置了根urls为myproject/urls.py,这样随着项目越来越多,根urls会越来越多,为了解决这个问题,可以在新建的项目底下写自己的urls。
新建一个项目web02
(django3) [root@golang myproject]# python manage.py startapp web02
写自己的urls
新增文件,并编辑文件内容
(django3) [root@golang myproject]# cat web02/urls.py
from django.conf.urls import url
from web02 import views
urlpatterns = [
url(r'^index/',views.index),
]
(django3) [root@golang myproject]# cat myproject/urls.py
"""myproject URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/1.11/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: url(r'^$', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.conf.urls import url, include
2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls'))
"""
#include为新导入的
from django.conf.urls import url,include
from django.contrib import admin
from web import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^myweb/', views.myweb),
url(r'^myweb2/', views.myweb2),
url(r'^myweb3/', views.myweb3),
url(r'^home/', views.home),
#新增语句
url(r'^web02/',include('web02.urls')),
]
修改views.py
(django3) [root@golang myproject]# cat web02/views.py
from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
#新增函数
def index(request):
return HttpResponse('web02')
访问
http://192.168.229.120:8000/web02/index/
models
models使用了ORM(Object Relational Mapping)对象关系映射技术。
将业务逻辑和SQL进行了解耦合,不用再写SQL对数据进行操作,并且和后端数据库是什么类型没关系。
通过models定义实现数据库表的定义。
python manage.py startapp web02
(django3) [root@golang myproject]# cat web02/models.py
from django.db import models
# Create your models here.
class Student(models.Model):
s_name=models.CharField(max_length=16)
s_age=models.IntegerField(default=1)
(django3) [root@golang myproject]# cat myproject/settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'web',
'web02',
]
生成迁移文件
(django3) [root@golang myproject]# python manage.py makemigrations
Migrations for 'web02':
web02/migrations/0001_initial.py
- Create model Student
在web02/migrations/目录下增加了一个迁移文件0001_initial.py
(django3) [root@golang myproject]# ll web02/migrations/
总用量 4
-rw-r--r--. 1 root root 612 1月 18 12:31 0001_initial.py
-rw-r--r--. 1 root root 0 1月 18 11:34 __init__.py
drwxr-xr-x. 2 root root 70 1月 18 12:35 __pycache__
迁移数据
(django3) [root@golang myproject]# python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions, web02
Running migrations:
Applying web02.0001_initial... OK
插入数据
改urls.py
(django3) [root@golang myproject]# cat web02/urls.py
from django.conf.urls import url
from web02 import views
urlpatterns = [
url(r'^index/',views.index),
#新增语句
url(r'^addstudent/',views.add_student),
]
改views.py
(django3) [root@golang myproject]# cat web02/views.py
from django.shortcuts import render
from django.http import HttpResponse
from web02.models import Student
# Create your views here.
def index(request):
return HttpResponse('web02')
#新增函数
def add_student(request):
student=Student()
student.s_name='Jerry'
student.save()
return HttpResponse('添加成功%'%student.s_name)
测试
浏览器输入
http://192.168.229.120:8000/web02/addstudent/
将数据打印出来
修改urls.py
(django3) [root@golang myproject]# cat web02/urls.py
from django.conf.urls import url
from web02 import views
urlpatterns = [
url(r'^index/',views.index),
url(r'^addstudent/',views.add_student),
#新增语句
url(r'^getstudent/',views.get_student),
]
修改views.py
(django3) [root@golang myproject]# cat web02/views.py
from django.shortcuts import render
from django.http import HttpResponse
from web02.models import Student
import random
# Create your views here.
def index(request):
return HttpResponse('web02')
def add_student(request):
student=Student()
student.s_name='Jerry%s'%random.randrange(100)
student.save()
return HttpResponse('添加成功%s' % student.s_name)
#新增函数
def get_student(request):
students=Student.objects.all()
for student in students:
print(student.s_name)
return HttpResponse('Student List')
运行
(django3) [root@golang myproject]# python /opt/django3/myproject/manage.py runserver 192.168.229.120:8000
浏览器访问
http://192.168.229.120:8000/web02/getstudent/
刷新浏览器,在运行的界面(非浏览器界面)可以看到数据。
将数据展示在web界面
views.py配置
(django3) [root@golang myproject]# cat web02/views.py
from django.shortcuts import render
from django.http import HttpResponse
from web02.models import Student
import random
# Create your views here.
def index(request):
return HttpResponse('web02')
def add_student(request):
student=Student()
student.s_name='Jerry%s'%random.randrange(100)
student.save()
return HttpResponse('添加成功%s' % student.s_name)
def get_student(request):
students=Student.objects.all()
for student in students:
print(student.s_name)
#return HttpResponse('Student List')
context={
"key1":"play",
"key2":"eat",
}
return render(request,'student_list.html',context=context)
student_list.html配置
(django3) [root@golang myproject]# cat /opt/django3/myproject/templates/student_list.html
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='UTF-8'>
<title>StudentList</title>
</head>
<body>
<h2>web</h2>
<h3>{
{
key1}}</h3>
<h3>{
{
key2}}</h3>
</body>
</html>
访问
http://192.168.229.120:8000/web02/getstudent/
继续修改views.py
(django3) [root@golang myproject]# cat web02/views.py
from django.shortcuts import render
from django.http import HttpResponse
from web02.models import Student
import random
# Create your views here.
def index(request):
return HttpResponse('web02')
def add_student(request):
student=Student()
student.s_name='Jerry%s'%random.randrange(100)
student.save()
return HttpResponse('添加成功%s' % student.s_name)
def get_student(request):
students=Student.objects.all()
for student in students:
print(student.s_name)
#return HttpResponse('Student List')
context={
"key1":"play",
"key2":"eat",
"students":students,
}
return render(request,'student_list.html',context=context)
继续修改student_list.html
(django3) [root@golang myproject]# cat /opt/django3/myproject/templates/student_list.html
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='UTF-8'>
<title>StudentList</title>
</head>
<body>
<h2>web</h2>
<h3>{
{
key1}}</h3>
<h3>{
{
key2}}</h3>
<h1>students</h1>
<ul>
{
%for student in students%}
<li>{
{
student.s_name}}</li>
{
%endfor%}
</ul>
</body>
</html>
访问
http://192.168.229.120:8000/web02/getstudent/
更新数据
views.py配置
(django3) [root@golang myproject]# cat web02/views.py
from django.shortcuts import render
from django.http import HttpResponse
from web02.models import Student
import random
# Create your views here.
def index(request):
return HttpResponse('web02')
def add_student(request):
student=Student()
student.s_name='Jerry%s'%random.randrange(100)
student.save()
return HttpResponse('添加成功%s' % student.s_name)
def get_student(request):
students=Student.objects.all()
for student in students:
print(student.s_name)
#return HttpResponse('Student List')
context={
"key1":"play",
"key2":"eat",
"students":students,
}
return render(request,'student_list.html',context=context)
#新增函数
def update_student(request):
student=Student.objects.get(pk=2)
student.s_name='Jack'
student.save()
return HttpResponse('更新成功')
urls.py配置
(django3) [root@golang myproject]# cat web02/urls.py
from django.conf.urls import url
from web02 import views
urlpatterns = [
url(r'^index/',views.index),
url(r'^addstudent/',views.add_student),
url(r'^getstudent/',views.get_student),
url(r'^updatetudent/',views.update_student),
]
验证是否更新
访问
http://192.168.229.120:8000/web02/updatestudent/
验证是否更新
http://192.168.229.120:8000/web02/getstudent/
删除数据
views.py配置
(django3) [root@golang myproject]# cat web02/views.py
from django.shortcuts import render
from django.http import HttpResponse
from web02.models import Student
import random
# Create your views here.
def index(request):
return HttpResponse('web02')
def add_student(request):
student=Student()
student.s_name='Jerry%s'%random.randrange(100)
student.save()
return HttpResponse('添加成功%s' % student.s_name)
def get_student(request):
students=Student.objects.all()
for student in students:
print(student.s_name)
#return HttpResponse('Student List')
context={
"key1":"play",
"key2":"eat",
"students":students,
}
return render(request,'student_list.html',context=context)
def update_student(request):
student=Student.objects.get(pk=2)
student.s_name='Jack'
student.save()
return HttpResponse('更新成功')
#新增函数
def del_student(request):
student=Student.objects.get(pk=2)
student.delete()
student.save()
return HttpResponse('删除成功')
urls.py配置
(django3) [root@golang myproject]# cat web02/urls.py
from django.conf.urls import url
from web02 import views
urlpatterns = [
url(r'^index/',views.index),
url(r'^addstudent/',views.add_student),
url(r'^getstudent/',views.get_student),
url(r'^updatetsudent/',views.update_student),
#新增语句
url(r'^delstudent/',views.del_student),
]
验证是否删除
访问
http://192.168.229.120:8000/web02/delstudent/
验证是否删除成功
http://192.168.229.120:8000/web02/getstudent/
可以看到jack已经没了。