使用django构建网页
使用django搭建网页
本笔记中,django项目的文件模型为
-mainproject
–app=snippets
定义模型以及如何使用模型:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35class Snippet(models.Model):
code= models.TextFiled()
language = models.CharFieild(max_length=20)
#如何使用:
from snippets.models import Snippet
#创建:
Snippet.objects.create(language="sdsd",c0de="sdfsd")
#选择所有
Snippet.objects.all()
#根据id选择
Snippet.objects.get(pk={number}) #pk就是id
#赋给变量:
snip = Snippet.objects.get(pk=2)
#读取模型的属性
print(snip.id)
print(snip.code)
print(snip.language)
s=Snippet.objects.filter(language='cpp',code="sdfsdf") ##使用与进行搜索
#删除数据
s.delete()
#修改数据并保存!
s.language="sdfsfsdfsdfsdf"
s.save()
#由于模型本来就是一个类,也可以定义类函数处理数据:
def is_cpp(self):
return self.language = 'cpp'将模型注册起来(可以在网站的admin/中操作)
1
2
3#enter snippet -> admin.py
from . import models #
admin.site.register(models.Snippet)把网页url交给一个controller处理
django通过url.py
路由实现url –> controller 的过程
- url分配controller
1
2
3
4
5
6
7#enter urls.py
#import 需要的handler
from snippets.views import func1
urlpatterns += [
path('xxx/yyy/', {func1},name='name1'),
path('sdcsdc/', {func2}, name='name2'),
]
- 编写controller
controller封装了网站业务逻辑,是一个包装了复杂实现的函数,接受一个request,返回一个reponse
下面展示了不同的情境
方法一:返回一个HttpResponse
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15#enter snippets -> views.py
from django.http import HttpResponse
#basic structure
def func1(request):
return HttpResponse('<h1>Can be any string</h1>')
# advanced:
def index(request):
snippet = Snippet.objects.first()
html=f'<h1>this is your snippet: {snip}, id: {snip.id}</h1>'
ul=''
for snip in Snippet.object.all():
ul += '<li>' + html + '</li>
newhtml = '<ul>' + ul + '</ul>'
return HttpResponse(newhtml)方法二:使用模板
创建模板:
1 | #enter snippets -> template |
1 | #enter views.py |
- 动态确定url并设置对应controller
1 | #enter 主项目 -> urls.py |
如果使用这种格式,python会把url中输入的数字传给pk,同时调用details函数处理这个url,且把pk做为关键字参数传到details这个controller去
1 | #enter views.py |
- 错误页面处理
解决获取特定页面失败:
先做好对应的controller
1 | #modify previous function details |
制作404.html
1 | ...... |
便捷版本:
1 | from django.shortcut import get_object_or_404 |
- 在每一个app里面也添加一个urlpatterns
为了方便实现层级结构urls映射,我们可以这么做
1 | #enter snippets -> urls.py |
1 | #enter mainproject -> urls.py |
- 模板的模板
为类似的模板创建一个具有其共性的html文件
我们在template目录下建立一个base.html
1 | //enter base.html |
block块中是可以让其他html往里面填充东西的地方,其他地方是共同的可以替换的地方
在需要用到base.html的文件里这么写:
1 | //enter new.html |
这样就可以将其中block1的内容填入base模板的block1中,然后加上base模板中的固定html,从而成为一个完整的new.html文件
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Simon Wang 的博客!
评论