标签:文件路径 建模 gem objects 中间件 记录 管理数据 address 网络应用
项目和应用有啥区别?
应用是一个专门做某件事的网络应用程序——比如博客系统,或者公共记录的数据库,或者简单的投票程序。
项目则是一个网站使用的配置和应用的集合。项目可以包含很多个应用。应用可以被很多个项目使用
打开app下的views.py文件
Web访问起始就是通过一个URL连接地址访问到服务器上的一个函数
在views.py中我们通过编写函数的形式,接收用户请求的request并返回一个response
# 每一个视图函数都需要有一个必须参数 request,用来接收用户访问时的请求内容 from django.http import HttpResponse def index(request): return HttpResponse("<h1>Hello world</h1>")
HttpResponse函数用来像用户返回一个字符串
创建好了一个可以在请求时返回H1标签的视图函数,但是现在通过浏览器还是访问不到需要我们为这个app下的函数进行路由配置
#myproject/urls.py from django.contrib import admin from django.urls import path from myapp import views urlpatterns = [ path(‘admin/‘, admin.site.urls), #admin控制界面路由 path(‘‘,views.index) #path函数第一个参数为访问地址,空字符串代表:当用户直接访问首页时 #第二个参数代表访问该地址时对应的视图函数,我们引入了app下的views中的index视图函数 ]
接下来访问127.0.0.1:8000,那么你会看到一个非常大的Hello world
以上将视图函数的查找直接写到主控路由并不是最好的办法,我们的项目通常会有非常多的路由配置项,如果都堆到这个文件中肯定是非常乱的,难以维护;
#myapp/urls.py from django.urls import path from . import views urlpatterns = [ path("",views.index) ]
现在虽然配置了app下的路由文件,但是访问时,是看不到对应视图的结果这是因为默认的url查找动作将会从主控路由文件开始,我们还需要在主控路由文件下进行路由分发设置,让主控路由可以找到子app下的路由
#myproject/urls.py from django.contrib import admin from django.urls import path,include from myapp import views urlpatterns = [ path(‘admin/‘, admin.site.urls), #path(‘‘,views.index) path(‘‘,include("myapp.urls")), # 函数 include() 允许引用其它 URLconfs ]
path(route, view, name) #route: 匹配规则,是一个字符串 #view:对应的视图函数 #name:未来我们会用到他,用来为匹配规则命名,这样方便日后修改路由而不影响全局下的路由使用
#myproject/settings.py TEMPLATES = [ { ‘BACKEND‘: ‘django.template.backends.django.DjangoTemplates‘, ‘DIRS‘: [os.path.join(BASE_DIR,‘template‘)], # 就是这一行 设置静态模板路径 ‘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‘, ], }, }, ]
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>hi</title> </head> <body> <h1>{{ message }}</h1> </body> </html>
#myapp/views.py from django.shortcuts import render def index(request): #return HttpResponse("<h1>Hello world</h1>") content = { "message":"你好,世界" #此处的key值message对应页面中我们写的{{ message }} } return render(request,‘index.html‘,content)
render(request, template_name, context=None) # 返回一个HTTP响应 # request: 固定接收request请求 # template_name: 为一个可以找到的模板页面 # context: 模板页面所需模板变量
STATICFILES_DIRS = ( os.path.join(BASE_DIR, ‘static‘), ) # STATICFILES_DIRS 该配置项用来告诉django在查找静态资源时,应该访问哪个目录
myproject/ myproject/ myapp/ template/ static/ img/ 1.jpg
<!DOCTYPE html> <html lang="en"> {% load staticfiles %} <head> <meta charset="UTF-8"> <title>hi</title> </head> <body> <h1>{{ message }}</h1> <img src=‘{% static "img/1.jpg" %}‘ alt="图片"> </body> </html>
#myapp/models.py from django.db import models # Create your models here. class Weather(models.Model): weather = models.CharField(max_length=100,verbose_name="天气") class Meta: verbose_name_plural = "天气" # 设置当前表名的一个可读的性更好的名字 def __str__(self):
return self.weather
当某个子应用APP涉及到了数据库的使用时,要记得在settings文件中进行配置:
#myproject/settings.py INSTALLED_APPS = [ ‘django.contrib.admin‘, ‘django.contrib.auth‘, ‘django.contrib.contenttypes‘, ‘django.contrib.sessions‘, ‘django.contrib.messages‘, ‘django.contrib.staticfiles‘, ‘myapp‘, ]
python manage.py migrate # 根据数据库迁移文件生成对应SQL语句并执行 # 初次执行是为了先把默认django需要的数据库创建出来 python manage.py makemigrations # 创建数据库迁移文件 # 这次执行是为了创建APP中Weather模型类的迁移文件 python manage.py # 将新添加的模型类迁移文件生成对应SQL并执行,实际创建出对应的Weather表
python manage.py createsuperuser
Username (leave blank to use ‘lienze‘): root Email address: Password: Password (again): This password is too short. It must contain at least 8 characters. This password is too common. This password is entirely numeric. Password: Password (again): This password is too common. This password is entirely numeric. Password: Password (again): Superuser created successfully.
#myapp/admin.py from django.contrib import admin from myapp import models admin.site.register(models.Weather) #使用register函数接收模型类作为参数即可完成注册
最终我们希望可以在视图函数中通过orm接口来访问到表中的数据,那么来打开视图文件吧,views.py
#myapp/views.py from django.shortcuts import render from myapp import models def index(request): weathers = models.Weather.objects.all() content = { "weathers":weathers, } return render(request, ‘index.html‘, content)
光返回是不行的,虽然我们绑定到了模板版变量的字典中,但是还得修改一下对应的要渲染的HTML页面哦:
<!DOCTYPE html> <html lang="en"> {% load staticfiles %} <head> <meta charset="UTF-8"> <title>hi</title> </head> <body> {% for weather in weathers %} <p>{{ weather }}</p> {% empty %} <p>没有任何天气</p> {% endfor %} </body> </html>
标签:文件路径 建模 gem objects 中间件 记录 管理数据 address 网络应用
原文地址:https://www.cnblogs.com/zhangan/p/10647646.html