views视图返回
当用户发送请求后,urls根据请求路由到views指定方法去处理后会返回,再进行下一步的操作。
views有三种返回方式render、HttpResponse和redirect。
它们分别代表什么意思呢,先看如下view.py的样例
from django.shortcuts import render,HttpResponse,redirect
from demo import models
import json
def login(request):
a = ['biaoti','geshi',0,1]
if request.method=='GET':
obj_li = models.UserInfo.objects.all()
return render(request, 'login.html', locals())
def test(request):
dic = {'a':1,'b':2}
dic_json = json.dumps(dic)
#return HtttpResponse("this is test!")
return HttpResponse(dic_json)
def redir(request):
print("this is redirect.")
return redirect('/login/')
然后是urls.py文件
from django.conf.urls import url, include
from django.contrib import admin
from demo import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^login/$', views.login),
url(r'^test/', views.test),
url(r'^red/', views.redir),
]
结合urls.py和views.py的代码对views的三种返回方式做下说明:
- render:当请求login页面到urls时,urls路由到views的login方法,方法处理后再经html渲染再返回。一般用于html渲染。
- HttpResponse:当请求test页面时,urls会路由到views的test方法,方法处理后直接返回字符串或者经js处理再返回。一般用于字符串直接返回或者经过js处理的场景
- redirect:当请求red页面时,urls会路由到views的redir方法,方法使用redirect函数直接跳转到了login页面,如果login存在则相当于去访问login,否则会返回404。
admin配置
admin是django后台管理页面。admin是django强大功能之一,它能共从数据库中读取数据,呈现在页面中,进行管理。默认情况下,它的功能已经非常强大,如果你不需要复杂的功能,它已经够用,但是有时候,一些特殊的功能还需要定制,比如搜索功能。
admin默认已经创建了,在urls中就可以看到
url(r'^admin/', admin.site.urls)
进入admin页面前需要先创建一个超级用户,在terminal中执行命令,创建超级用户
python manage.py createsuperuser
回车执行,这时会提示数据超级用户的username、Email、password,password最少8位,不能只有数字或字母。输入后,访问http://127.0.0.1:8000/admin,输入刚刚创建的用户名和密码即可进入admin后台。
默认数据很少,只有users和groups。
如果你觉得英文界面不好用,可以在setting.py文件中修改以下选项
LANGUAGE_CODE = 'en-us' #LANGUAGE_CODE = 'zh-hans'
把创建的数据库表数据添加到admin后台页面,通过admin来查看修改数据库数据。需要修改appname下的admin.py文件。
admin.py文件内容如下:
from django.contrib import admin
from demo import models #导入demo这个app下的models模块(models.py文件用来创建表)
admin.site.register(models.UserInfo) #添加了models模块里的UserInfo类(UserInfo类是创建的表名)
models.py文件的内容如下:
from django.db import models
class UserInfo(models.Model):
username = models.CharField(max_length=32,null=True)
password = models.CharField(max_length=32,null=True)
def __str__(self):
return self.username
models.py文件创建了一个UserInfo类,其实就是在数据库中创建了一个UserInfo的表。在admin.py文件中注册这个UserInfo类,即可在admin后台管理UserInfo这个表的数据。
注:在models.py创建类时,最后要添加一个__str__函数返回一个类的变量即表的字段,这样在admin后台的表数据中可以查看到这个字段名的数据,否则都会显示相同的UserInfo object。
没有添加__str__方法返回表的字段名
添加了__str__方法并返回了username字段名
如果想在查看表数据时显示多个字段或者添加查找、筛选等,可以添加一个类来实现这些功能
list_display: 指定要显示的字段
search_fields: 指定搜索的字段
list_filter: 指定列表过滤器
ordering: 指定排序字段
可以修改admin.py文件
from django.contrib import admin
from demo import models
# Register your models here.
class MyAdmin(admin.ModelAdmin): #定义一个类,继承自admin.ModelAdmin
list_display = ("username","password") #列出要显示的字段
search_fields = ("username",) #可以搜素的字段名
list_filter = ("username",) #可以过滤的字段名
ordering = ("username",) #可以排序的字段名
admin.site.register(models.UserInfo,MyAdmin) #MyAdmin类中定义的功能添加到UserInfo表中
再次查看UserInfo表数据