猿问
下载APP

请问patterns函数在新版django中为什么不用了?

patterns函数在新版django中为什么不用了


忽然笑
浏览 121回答 4
4回答

叮当猫咪

patterns函数在新版django中为什么不用了python的话,你可以把python的安装环境加到系统变量(我记得是自动添加的,可以在dos下直接运行python)至于django的话,可以直接运行django-admin startproject mysite2(django-admin不用.py),不用python django-admin.py startproject mysite2(如果要的话,需要在python安装包下的script添加到系统环境变量)1、可以扩充django模板的现有语法。例如switch case 等等,没有做不到,只有想不到。 2、为模板中加入函数功能。 3、把不同模板中的共有片段抽象出来,进行封装。好处是大大减少了代码量, 注意我这里说的复用既包。

一只斗牛犬

Django forms使用容易, 又方便扩展, 因此Django admin和CBVs基本都基于forms使用. 事实上, 由于django forms的强大验证功能, 大多数Django API 框架都是用forms作为其验证的一部分. 虽然django forms的学习需要花费一点时间, 但如果将forms, mod...

慕虎7371278

一.下载Django如果电脑没安装 python,点击这里。然后从这里下载 Django 稳定版本。或者执行命令下载 Django 最新版本:git clone https://github.com/django/django.git这里我用的是 Mac 自带的python2.7,下载是最新版本的Django后发现python2.7版本需要升级,但是注意,对 iOS 开发者来说,最好不要升级python2.7到python3,因为Xcode只支持最稳定版的python2.7脚本。所以这里我下载的Django版本是1.6.1。二.安装Djangocd Django sudo python setup.py. installPython 默认在/Library/Python/2.7中,那么无论如何你在哪里安装完DJango,都会在/Library/Python/2.7/site-packages中生成一个django的文件夹。如果要删除django,只需要把该目录下的django文件夹删除即可。三.测试LocalHost是否成功sudo mkdir ~/Djangodemo/*创建一个用于测试Localhost的网站样例*/sudo django-admin.py startproject testLocalHostcd testLocalHostpython manage.py runserver浏览器打开http://localhost:8000,成功的话你将会看到Django的简单的成功页面说明:django-admin.py在我们安装完Django之后除了在site-packages中生成django文件夹之外(里面都是一些DJango命令的一些文件和代码),在/usr/local/bin/中也生成了一个名为django-admin.py的链接,这样无论你在何种路径下都可以直接调用django-admin.py文件了。在Win下我们称这个过程为:加入到环境变量。四.文件结构1.创建 mysite 工程删除原来的 LocalHost 工程,创建 mysite 工程,执行命令:$ mkdir mysite$ django-admin.py startporject mysite此时的目录结构如下:mysite/mysite/__init__.pysettings.pyurls.pymanage.py2.manage.py作用:把该工程的包加入了 sys.path ;以后你可以直接在你的代码中引用该工程中其他的包。加载 DJANGO_SETTINGS_MODULE ,指明该工程的配置文件是 mysite/settings.py。最主要的是它包裹了 django-admin.py 的一些函数,让你可以通过它来操作整个工程。3.__init__.py严格意义上讲__init__.py不属于 DJango 的范畴,而是 Python 语言的一种习惯,经常为空文件。主要是告诉工程这是一个包(Package),防止不经意间因为包名为诸如String之类的字符串而引起的混乱,当然你也可以在里面加一些初始化的函数,但不在我们的讨论之列。4.settings.py此前我们提到了manage.py的第二件工作便是指定了它是工程的配置文件,那它配置了些什么呢?代码量在其他几个文件中属于比较多的,有一百行的样子,主要设置了关于数据库,后台管理等配置,等到我们要用的时候再详细说明。5.urls.py它负责把客户的请求翻译成函数调用。是重要要掌握的文件。DJango 通过 settings.py 中指定的 URLconf 参数找到对应的 urls.py 文件,此例中正好为我们的这个文件。DJango 在 urls.py 中找到 urlpatterns 变量。DJango 收到一个客户地址请求,我们不妨设为 localhost。DJango 在 urlpatterns 中顺序遍历正则式,找到第一个匹配,调用该正则式对应的函数。该函数返回客户端所请求的内容。对开发者来说,真正需要关心的是如何完成正则表达式和对应函数的对应。 如下面例子:123urlpatterns=patterns("",url(r'^$','hello.views.home'),)说明:其中url里面左半部分是正则式,右半部分是函数调用。r说明是raw匹配,表明正则表达式要求每个字符都必须被匹配,是一个可选项,如果不能理解可以省略。^表示匹配开始,$表示匹配结束。所以这个正则表达式匹配了空字符,正好符合地址为localhost的客户请求(DJango收到的请求会自动省略域名,即localhost,即真正的请求字符串为空)。右侧表明腰调用名为hello的app的views.py文件的home函数。6.增加 hello app刚才我们在url匹配的时候调用了home函数,此时我们就开始创建它:python manage.py startapp hello这样我们在manage.py同级目录下生成了hello目录,进入hello目录其他文件都不用管,也不需要理解,直接打开views.py编辑成如下样子:from django.http import HttpResponsedef home(request):return HttpResponse("Hello World")启动服务器。其实hello相当于是一个app应用被添加进了mysite工程,当特定的请求到来时通过url匹配调用相应app下的views.py中的函数来达到不同的显示效果。五.Django-URL解析和匹配1.patterns() 函数patterns 函数的的原型:patterns(prefix, pattern_description, ...)其中prefix表示函数调用的前缀,而pattern_description则是一系列的元组。举例说明prefix的作用:urlpatterns = patterns("hello.views",url(r'^$', 'home'),)上例和上例的执行效果一样,都表明了hello app下的views文件里的home函数。注意:前缀末尾不必包含“.”;另外因为python函数规定参数不能多于 255 个,因此如果你的映射关系很多,可以利用诸如:urlpatterns += patterns(…)这种形式累加。2.url()函数url 函数的原型:1url(regex,view,kwargs=None,name=None,prefix='')其中后三项是可选项,在我们的例子中:regex=”r’^$'”;view=”hello.views.home”;name项给该url命名,这在未来通过name反向确定url有很大的作用;kwargs则传递额外的参数;prefix和此前的prefix作用一致,不过只适用这一条url。3.通过url传递信息DJango 在通过url传递参数时有两种方式,一种通过位置,一种通过关键词。我们先看第一种,改此前的映射关系如下:1url(r'^(\d{4})/(\d{2})$','hello.views.home'),修改hello/views.py,增加两行代码如下:def home(request, year='0000', month='00'):return HttpResponse("Hello World "+year+" "+month)这样当用户请求locahost:8000/2015/5时候,相当于在调用home(request, ‘2015’, ’5’),注意此时year和month的相对关系,因为参数传递是基于位置信息的,第一个是4个数字是年,第二个2个数字是月。下面是第二种,即关键词方式,我们修改两个文件如下:#mysite/urls.pyurl(r'^(?P\d{4})/(?P\d{2})$', 'hello.views.home'),#hello/views.py#注意year和month的位置def home(request, month='00', year='0000'):return HttpResponse("Hello World "+year+" "+month)

撒科打诨

一、模板类型错误:错误原因:在models中漏掉了return:class UserProfile(models.Model):"""功能说明: 扩展用户---------------------------------------------------------------------------修改人 修改时间 修改原因------------------------------------------------------------------------------BeginMan 2013-05-05"""user=models.OneToOneField(User,blank=True,null=True,related_name='user',verbose_name=_(u'用户'))company_name=models.CharField(u'企业(或代理商)名称',max_length=30, default='未知') #企业商名称product=models.ForeignKey(Product, blank=True,null=True,verbose_name=_(u'产品')) #产品class Meta:verbose_name = _(u'配置')verbose_name_plural = _(u'用户配置')def __unicode__(self):【这里】_(u'%(user_name)s') % {'user_name':self.user.username}这里加上return即可。二、url相关错误、静态文件无法访问,如样式出不来css样式总出不来,折腾了一个多小时,原来,urlpatterns 写成这样:urlpatterns = patterns('',(r'^ $','login.msg.index'), #首页)#登录注册urlpatterns = patterns('',(r'^accounts/register/$','login.msg.register_page'), #注册(r'^accounts/login/$','login.msg.login'), #登录(r'^accounts/logout/$','django.contrib.auth.views.logout',{'next_page':'/'}), #Django提供一个专用于处理登出表单函数logout(r'^accounts/register/success/$','django.views.generic.simple.direct_to_template',{'template':'registration/register_success.html'}), #注册成功)#admin后台管理urlpatterns += patterns('',(r'^admin/doc/', include('django.contrib.admindocs.urls')),(r'^admin/', include(admin.site.urls)),)#静态文件的访问urlpatterns += patterns('',(r'^site_media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_SITE}),(r'^upload_media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}),)我把 [登录注册] url后面也写成 = 而并非+= ,这就造成了url覆盖,所以就加载不了静态文件,同时首页也会打不开。三、编码错误、错误类型如下:DjangoUnicodeDecodeError at /admin/books/book/'ascii' codec can't decode byte 0xe8 in position 0: ordinal not in range(128). You passed in <Book: [Bad Unicode data]> (<class 'books.models.Book'>)解决方案:混淆了 python2 里边的 str 和 unicode 数据类型。(0)、你需要的是让编码用实际编码而不是 ascii(1)、对需要 str->unicode 的代码,可以在前边写上import sysreload(sys)sys.setdefaultencoding('utf8')把 str 编码由 ascii 改为 utf8 (或 gb18030)(2)、python3 区分了 unicode str 和 byte arrary,并且默认编码不再是 ascii参考:http://vososo.com/vo/558四、其他错误、Django POST请求错误forbidden(403) CSRF verification failed. Request aborted在 settings.py 中的MIDDLEWARE_CLASSES 设置下 添加'django.middleware.csrf.CsrfResponseMiddleware',重新 runserver. OK重点参考:http://blog.csdn.net/feng88724/article/details/7221449我用的是django1.2.3,当使用session时,也会像上面出错,这时把下面注释掉即可:# 'django.middleware.csrf.CsrfViewMiddleware', #这段代码理应注释掉,在使用session的时候、login:login() takes exactly 1 argument (2 given)这在登录视图函数的时候特别常见,原因就是函数login与login模块的名字冲突,如登录url这样写:(r'^account/login/$', 'login'), #登录那么,对应的视图函数如下:def login(request):"""功能说明: 登 录------------------------------------------------------------开发者 修改时间 修改原因------------------------------------------------------------beginman 2013-06-05"""if request.method == "POST":try:username = request.POST.get('username')password = request.POST.get('password')user = authenticate(username=username,password=password)if user is not None:if user.is_active:login(request,user)return HttpResponse('ok')else:return HttpResponse('error')except Exception,e:log.error("login:%s" % str(e))return render_to_response('account/login.html')当然如果这样写,不要忘记导入:from django.contrib.auth import authenticate, login这样就坏事了,因为出现了两个login.这就导致了上面的问题,解决办法有两个,、修改login视图函数的名称和对应的url中。如webLogin、导入设置:from ..login as _login 这样也行,别忘了都要改过来。、无法跳转如,我想登录。然后登录成功后跳转到主页,如上:把上面代码改写成这样.....if user.is_active:login(request,user)return HttpResponseRedirect('/')....但是却没有实现跳转,如下:这里并不是跳转写错了,而是没有注意到我这个登录界面是ajax POST形式的,代码如下://登录function _submit(){var username = $("input[name='username']").val();var password = $("input[name='password']").val();if (username == ""){art.dialog({content: '用户名不能为空',time :1.5});}else if(password == ""){art.dialog({content: '密码不能为空',time :1.5});}else{$.post('/account/login/',{'username':username,'password':password},function(data){if (data =='error'){art.dialog({content: '用户名或密码错误',time :1.5});}});}}Query.post( url, [data], [callback], [type] ) :如果返回,它只返回一个字符串。所以并不能在后台跳转。解决方法是: return HttpResponse('ok'),通过接受返回的Ok 来在前台实现跳转。
打开App,查看更多内容
随时随地看视频慕课网APP
我要回答