(1)首先下载django:
pip install django==2.0 https://pypi.douban.com/simple
如果出现红字报错,重新命令行如下:
直接pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn django==2.2
然后确认pip list
2.创建一个空文件夹然后命令行打开开始创建项目:
django-admin startproject start_item
3.创建网站文件
python manage.py startapp 网站名
会有两个文件夹一个是项目名start_item,一个是search网站名,一个manage.py。其余文件是后期操作产生的。
4.配置名目setting.py文件
(1)配置参数
1.访问权限:允许其他计算机访问
ALLOWED_HOSTS=['*']
2.注册子应用:
把网站名添加到INSTALLED_APPS中
3.html文件存放文件夹的路径配置
首先在根目录(跟manage.py同级)创建templates文件夹
然后在参数TEMPLATES中的DIRS中配置[os.path.join(BASE_DIR),'templates'],
4.配置网站默认语言LANGUAGE_CODE='zh-hans'
5.配置时间TIME_ZONE='Asia/Shanghai'
6.把USE_TZ=False
记得在根目录建立temeplates文件夹
7.配置完启动 python manage.py runserver 0.0.0.0:8000
1.在本机打开127.0.0.1:8000
2.在非本机搜服务器ip,然后浏览器打开IP:8000
如下图:
实践1:reder返回字符串
Djogo在网站文件夹下有个views.py文件,该文件是django核心文件,控制输出内容以及处理用户的交互逻辑
写入:
def index(request):
return HttpResponse("Hello World")
(2)在项目文件中找到urls.py,写入
from django.contrib import admin
from django.urls import path
from search.views import index
urlpatterns={
path('admin/',admin.site.urls),
path('',index,name='index'),
}
(3)cd到根目录,然后运行
python manage.py runserver 0.0.0.0:8000
实践2:render返回html文件
1.在根目录创建一个templates文件夹(如果已经创建,并且在setting文件
中设置完毕后,那就不管)
在文件夹创建一个index.html文件
<h1>刘什么宏</h1>
<div>看一下,看一下</div>
2.在网站文件夹的views.py文件中写入
from django.shortcuts import render
def index_html(request):
#index.html是你创建的html文件名字
return render(request,'index.html')
3.在项目文件夹中的urls中导入
from django.shortcuts import render
def index_html(request):
#这个是创建的网页文件
return render(request,'index.html')
4.(3)在项目文件夹中urls中导入
#index_html中添加urls文件中模板
from search.views import index,index_html
urlpatterns={
path('index_html/',index_html,name='index_html')
}
启动python manage.py runserver 0.0.0.0:8000
打开浏览器验证http://127.0.0.1:8000/index_html/
实践3:根据模板创建数据库里的表
在项目文件夹中的setting.py中修改如下代码,并检查网站名是不是在INSTALLED_APPS 中:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'test',
'HOST':'localhost',
'PORT':'3306',
}
}
在项目文件夹中的model.py文件中添加数据表模板如下:
from django.db import models
class Student(models.Model):
name_text=models.CharField(max_length=20)
height=models.DecimalField(max_digits=10,decimal_places=3)
weight=models.DecimalField(max_digits=10,decimal_places=3)
在manager.py同级目录开命令行输入如下代码:
(1)
# 创建表结构
python manage.py migrate
(2)
#让 Django 知道我们在我们的模型有一些变更
python manage.py makemigrations 网站名
#比如python manage.py makemigrations search
(3) # 创建表结构
python manage.py migrate 网站名
#python manage.py migrate TestModel
命令行显示如下:
实践3:根据模板创建数据库里的表
在项目文件夹中的urls.py文件中加入:
from django.contrib import admin
from django.urls import path
from search.testd import testdb
urlpatterns = [
#主要看这里
path('dd/',testdb),
]
在网站文件夹新建一个py文件,添加自定义函数:
# -*- coding: utf-8 -*-
from django.http import HttpResponse
from search.models import Student
# 数据库操作
def testdb(request):
test1 = Student(name='runoob')
test1.save()
return HttpResponse("<p>数据添加成功!</p>")
网站文件夹中的model.py文件,已经创建了Student表格,如下:
from django.db import models
class Student(models.Model):
name = models.CharField(max_length=20)
然后命令行上运行:python manage.py runserver 0.0.0.0:8000
类似的增删改查全部都是类似。
testd.py
# -*- coding: utf-8 -*-
from django.http import HttpResponse
from search.models import Student
# 数据库操作
def testdb(request):
test1 = Student(name='runoob')
test1.save()
return HttpResponse("<p>数据添加成功!</p>")
def selectdb(request):
response = ""
response1 = ""
# 通过objects这个模型管理器的all()获得所有数据行,相当于SQL中的SELECT * FROM
list = Student.objects.all()
# filter相当于SQL中的WHERE,可设置条件过滤结果
response2 = Student.objects.filter(id=1)
# 获取单个对象
response3 = Student.objects.get(id=1)
# 限制返回的数据 相当于 SQL 中的 OFFSET 0 LIMIT 2;
Student.objects.order_by('name')[0:2]
#数据排序
Student.objects.order_by("id")
# 上面的方法可以连锁使用
Student.objects.filter(name="runoob").order_by("id")
# 输出所有数据
for var in list:
response1 += var.name + " "
response = response1
return HttpResponse("<p>" + response + "</p>")
def updatadb(request):
# 修改其中一个id=1的name字段,再save,相当于SQL中的UPDATE
test1 = Student.objects.get(id=1)
test1.name = 'Google'
test1.save()
# 另外一种方式
# Test.objects.filter(id=1).update(name='Google')
# 修改所有的列
# Test.objects.all().update(name='Google')
return HttpResponse("<p>修改成功</p>")
def deletedb(request):
# 删除id=1的数据
test1 = Student.objects.get(id=1)
test1.delete()
# 另外一种方式
# Test.objects.filter(id=1).delete()
# 删除所有数据
# Test.objects.all().delete()
return HttpResponse("<p>删除成功</p>")
urls.py代码如下:
from django.contrib import admin
from django.urls import path
from search.testd import testdb,selectdb,updatadb,deletedb
urlpatterns = [
path('admin/', admin.site.urls),
#path('',index,name='index'),
#path('index_html/',index_html,name='index_html'),
path('insert/',testdb),
path('select/',selectdb),
path('updata/',updatadb),
path('delete/',deletedb),
]
实践3:传递变量到前端
在views文件中添加如下代码:
from django.shortcuts import render
from django.http import HttpResponse
def index_html(request):
dd="测试"
return render(request,'index.html',{'emp':dd})
在html文件中添加:
<h1>刘什么宏</h1>
<div>看一下,看一下{{ emp }}</div>
在urls文件中添加:
from django.contrib import admin
from django.urls import path
from search.testd import testdb,selectdb,updatadb,deletedb,getDemo
from search.views import index_html
urlpatterns = [
path('getDemo/',index_html),
]
实践4:get请求
在testd.py文件中代码:
# -*- coding: utf-8 -*-
from django.http import HttpResponse
from search.models import Student
def getDemo(request):
if request.method == "GET":
print(request.GET)
print(request.GET['a'])
print(request.GET.getlist('a'))
print(request.GET.get('c','no have c'))
elif request.method == "POST":
pass
else:
pass
return HttpResponse("this is test_get_post")
在urls.py文件中代码,加入路由:
from django.contrib import admin
from django.urls import path
from search.testd import testdb,selectdb,updatadb,deletedb,getDemo
from search.views import index_html
urlpatterns = [
path('getDemo/',getDemo),
]
然后浏览器访问:http://127.0.0.1:8000/getDemo/?a=10&b=20
后台命令行如下图:
收数据传到后台。
实践4:post请求
创建一个html文件,postdeml.html,输入:
<div>
<form method="post" action="/get_post/">
姓名: <input type="text" name='uname'>
<input type="submit" value="提交">
</form>
</div>
然后函数文件文件,views.py输入如下:
from django.shortcuts import render
from django.http import HttpResponse
def index_post(request):
return render(request,'postdeml.html')
def get_post(request):
if request.method == "GET":
return HttpResponse(POST_FORM)
elif request.method == "POST":
print("uname is ",request.POST['uname'])
return HttpResponse("POST is ok")
else:
pass
路由管理文件urls.py文件,输入如下:
from django.contrib import admin
from django.urls import path
from search.testd import testdb,selectdb,updatadb,deletedb,getDemo
from search.views import index_html,index_post,get_post
urlpatterns = [
path('postHtml/',index_post),
path('get_post/',get_post)
]
然后运行python manage.py runserver 0.0.0.0:8000
浏览器输入http://127.0.0.1:8000/postHtml/
然后输入文本按钮点一下
可能会报错
这里在setting.py文件中添加如下代码:
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
# 'django.middleware.csrf.CsrfViewMiddleware',
]
把csrf验证禁掉,然后就可以浏览器访问成功