1、django-admin startproject djtest
python3 manage.py runserver
2、创建应用:
./manage.py startapp blog
3、修改setting.py
ALLOWED_HOSTS = ['*']
INSTALLED_APPS = [
.....
'blog',
]
4、创建模型:models.py
from django.db import models
class BlogPost(models.Model):
title = models.CharField(max_length=150)
body = models.TextField()
timestamp = models.DateTimeField()
5、设置数据库引擎:setting.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
6、同步模型到数据库:
python manage.py makemigrations
python manage.py migrate
7、setting.py中的admin模块:
INSTALLED_APPS=[
'django.contrib.admin',
'django.contrib.auth',]
//访问 http://ip:port/admin
8、用admin管理其他类,在blog/admin.py中注册:
from django.contrib import admin
from blog import models
class BlogPostAdmin(admin.ModelAdmin):
list_display = ('title', 'timestamp')
admin.site.register(models.BlogPost, BlogPostAdmin)
9、界面包括:模板、视图函数、URL模式
{{}} 变量
{% for i in xx %} 控制语句
{% endfor%}
10、添加URL控制器:在总urls.py中添加,这一句的意思是blog/urls.py,所以需要创建blog/urls.py文件
urlpatterns = [
.......
path('blog/',include('blog.urls')),
]
11、vi blog/urls.py
urls.py
from django.urls import path,include
import blog.views
urlpatterns = [
path('', blog.views.archive),
]
12、编辑视图函数:blog/views.py
from django.shortcuts import render
Create your views here.
from datetime import datetime
from django.shortcuts import render_to_response
from blog.models import BlogPost
def archive(request):
posts = BlogPost.objects.all().order_by('-timestamp')[:10]
return render_to_response('archive.html', {'posts': posts})
//po sts = BlogPost.objects.all().order_by('-timestamp') 按时间逆序查询,-号去掉按时间正序查询
13、设置模型的排序规则:class Meta:
class BlogPost(models.Model):
title = models.CharField(max_length=150)
body = models.TextField()
timestamp = models.DateTimeField()
class Meta:
ordering = ('-timestamp',)
14、添加视图:blog/templates/archive.html
<html>
<title>My Blog</title>
<body>
<form action="/blog/create/" method=post>{% csrf_token %}
<table>{{ form }}</table>
<input type=submit>
</form>
{% if posts %}
{% for post in posts %}
<h2>{{ post.title }}</h2>
<p>{{ post.timestamp }}</p>
<p>{{ post.body }}</p>
{% endfor %}
{% else %}
<p>No blog entries have been posted yet.</p>
{% endif %}
{{ sql_queries|length }} queries
{% for qdict in sql_queries %}
{{ qdict.sql|safe }} ({{ qdict.time }} seconds)
{% endfor %}
</body>
</html>
14、添加新增的URL控制器
urlpatterns = [
path('', blog.views.archive),
path('create/',blog.views.create_blogpost),
]
15、添加视图控制views.py:
def create_blogpost(request):
if request.method == 'POST':
BlogPost(title=request.POST.get('title'),body=request.POST.get('body'),timestamp=datetime.now(),).save()
return HttpResponseRedirect('/blog/')
16、跨站点脚本工具的防御:
页面中添加: {% csrf_token %}
views中改写:
return render_to_response('archive.html', {'posts': posts},RequestContext(request))
在post方法的头部:
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
17、在models.py中添加表单模型:
from django import forms
class BlogPostForm(forms.ModelForm):
class Meta:
model = BlogPost
exclude = ('timestamp',)
18、页面中替换:form.as_p/form.as_ul/form.as_table
<form action="/blog/create/" method=post>{% csrf_token %}
<table>{{ form }}</table>
<input type=submit>
</form>
19、views修改视图传参:
from blog.models import BlogPost, BlogPostForm
return render_to_response('archive.html', {'posts': posts,
'form': BlogPostForm()}, RequestContext(request)
20、views中POST方法修改,添加验证:
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def create_blogpost(request):
if request.method == 'POST':
form=BlogPostForm(request.POST)
if form.is_valid():
post=form.save(commit=False)
post.timestamp=datetime.now()
form.save()
return HttpResponseRedirect('/blog/')
21、视图扩展:{% extends %}
{% extends "base.html" %}
22、
网友评论