发布网友 发布时间:2024-10-05 09:00
共1个回答
热心网友 时间:2024-11-26 14:13
导读:本篇文章首席CTO笔记来给大家介绍有关Django150怎么检查是翻新车的相关内容,希望对大家有所帮助,一起来看看吧。
在Django中,如何检查用户是否在某个组中您可以通过组用户中的$c属性。
fromdjango.contrib.auth.modelsimportUser,Group
group=Group(name=“Editor”)
group.save()#为此示例保存此新组
user=User.objects.get(pk=1)#假设有一个初始用户
user.groups.add(group)#user现在在“编辑器”组
然后user.groups.all()返回[组:编辑器;]
djangocookie在html里怎么读浏览器的开发者在很早的时候就已经意识到,HTTP's的无状态会对Web开发者带来很大的问题,于是(cookies)应运而生。cookies是浏览器为Web服务器存储的一小段信息。每次浏览器从某个服务器请求页面时,它向服务器回送之前收到的cookies
来看看它是怎么工作的。当你打开浏览器并访问google.com,你的浏览器会给Google发送一个HTTP请求,起始部分就象这样:
GET/HTTP/1.1
Host:google.com
...
当Google响应时,HTTP的响应是这样的:
HTTP/1.1200OK
Content-Type:text/html
Set-Cookie:PREF=ID=5b14f22bdaf1e81c:TM=1167000671:LM=1167000671;
expires=Sun,17-Jan-203819:14:07GMT;
path=/;domain=.google.com
Server:GWS/2.1
...
注意Set-Cookie的头部。你的浏览器会存储cookie值(PREF=ID=5b14f22bdaf1e81c:TM=1167000671:LM=1167000671),而且每次访问google站点都会回送这个cookie值。因此当你下次访问Google时,你的浏览器会发送像这样的请求:
GET/HTTP/1.1
Host:google.com
Cookie:PREF=ID=5b14f22bdaf1e81c:TM=1167000671:LM=1167000671
...
于是Cookies的值会告诉Google,你就是早些时候访问过Google网站的人。这个值可能是数据库中存储用户信息的key,可以用它在页面上显示你的用户名。Google会(以及目前)使用它在网页上显示你账号的用户名。
存取Cookies
在Django中处理持久化,大部分时候你会更愿意用高层些的session和/或后面要讨论的user框架。但在此之前,我们需要停下来在底层看看如何读写cookies。这会帮助你理解本章节后面要讨论的工具是如何工作的,而且如果你需要自己操作cookies,这也会有所帮助。
读取已经设置好的cookies极其简单。每一个``HttpRequest``对象都有一个``COOKIES``对象,该对象的行为类似一个字典,你可以使用它读取任何浏览器发送给视图(view)的cookies。
defshow_color(request):
if"favorite_color"inrequest.COOKIES:
returnHttpResponse("Yourfavoritecoloris%s"%request.COOKIES["favorite_color"])
else:
returnHttpResponse("Youdon'thaveafavoritecolor.")
写cookies稍微复杂点。你需要使用HttpResponse对象的set_cookie()方法。这儿有个基于GET参数来设置favorite_color
cookie的例子:
defset_color(request):
if"favorite_color"inrequest.GET:
#CreateanHttpResponseobject...
response=HttpResponse("Yourfavoritecolorisnow%s"%request.GET["favorite_color"])
#...andsetacookieontheresponse
response.set_cookie("favorite_color",
request.GET["favorite_color"])
returnresponse
else:
returnHttpResponse("Youdidn'tgiveafavoritecolor.")
你可以给response.set_cookie()传递一些可选的参数来控制cookie的行为
好坏参半的Cookies
也许你已经注意到了,cookies的工作方式可能导致的问题。让我们看一下其中一些比较重要的问题:
cookie的存储是自愿的,一个客户端不一定要去接受或存储cookie。事实上,所有的浏览器都让用户自己控制是否接受cookies。如果你想知道cookies对于Web应用有多重要,你可以试着打开这个浏览器的选项:
尽管cookies广为使用,但仍被认为是不可靠的的。这意味着,开发者使用cookies之前必须检查用户是否可以接收cookie。
Cookie(特别是那些没通过HTTPS传输的)是非常不安全的。因为HTTP数据是以明文发送的,所以特别容易受到嗅探攻击。也就是说,嗅探攻击者可以在网络中拦截并读取cookies,因此你要绝对避免在cookies中存储敏感信息。这就意味着您不应该使用cookie来在存储任何敏感信息。
还有一种被称为”中间人”的攻击更阴险,攻击者拦截一个cookie并将其用于另一个用户。第19章将深入讨论这种攻击的本质以及如何避免。
即使从预想中的接收者返回的cookie也是不安全的。在大多数浏览器中您可以非常容易地修改cookies中的信息。有经验的用户甚至可以通过像mechanize()这样的工具手工构造一个HTTP请求。
因此不能在cookies中存储可能会被篡改的敏感数据。在cookies中存储IsLoggedIn=1,以标识用户已经登录。犯这类错误的站点数量多的令人难以置信;绕过这些网站的安全系统也是易如反掌。
如何正确使用DjangoForms1.DjangoForms的强大之处
有些django项目并不直接呈现HTML,二是以API框架的形式存在,但你可能没有想到,在这些API形式的django项目中也用到了djangoforms.djangoforms不仅仅是用来呈现HTML的,他们最强的地方应该是他们的验证能力.下面我们就介绍几种和Djangoforms结合使用的模式:
2.模式一:ModelForm和默认验证
最简单的使用模式便是ModelForm和model中定义的默认验证方式的组合:
#myapp/views.py
fromdjango.views.genericimportCreateView,UpdateView
frombraces.viewsimportLoginRequiredMixin
from.modelsimportArticle
classArticleCreateView(LoginRequiredMixin,CreateView):
model=Article
fields=('title','slug','review_num')
classArticleUpdateView(LoginRequiredMixin,UpdateView):
model=Article
fields=('title','slug','review_num')
正如以上代码中看到的一样:
ArticleCreateView和ArticleUpdateView中设置model为Article
两个view都基于Articlemodel自动生成了ModelForm
这些ModelForm的验证,是基于Articlemodel中定义的field转换而来的
3.模式二,在ModelForm中修改验证
在上面的例子中,如果我们希望每篇articletitle的开头都是"new",那么应该怎么做呢?首先我们需要建立自定义的验证(validator):
#utils/validator.py
fromdjango.core.exceptionsimportValidationError
defvalidate_begins(value):
ifnotvalue.startswith(u'new'):
raiseValidationError(u'Muststartwithnew')
可见,在django中的验证程序就是不符合条件便抛出ValidationError的function,为了方便重复使用,我们将它们放在djangoapputils的validators.py中.
接下来,我们可以在model中加入这些validator,但为了今后的方便修改和维护,我们更倾向于加入到ModelForm中:
#myapp/forms.py
fromdjangoimportforms
fromutils.validatorsimportvalidate_begin
from.modelsimportArticle
classArticleForm(forms.ModelForm):
dev__init__(self,*args,**kwargs):
super(ArticleForm,self).__init__(8args,**kwargs)
self.fields["title"].validators.append(validate_begin)
classMeta:
model=Article
Django的editviews(UpdateView和CreateView等)的默认行为是根据view中model属性,自动创建ModelForm.因此,我们需要调用我们自己的Modelform来覆盖自动创建的:
#myapp/views.py
fromdjango.views.genericimportCreateView,UpdateView
frombraces.viewsimportLoginRequiredMixin
from.modelsimportArticle
from.formsimportArticleForm
classArticleCreateView(LoginRequiredMixin,CreateView):
model=Article
fields=('title','slug','review_num')
form_class=ArticleForm
classArticleUpdateView(LoginRequiredMixin,UpdateView):
model=Article
fields=('title','slug','review_num')
form_class=ArticleForm
4.模式三,使用form的clean()和clean_field()方法
如果我们希望验证form中的多个field,或者验证涉及到已经存在之后的数据,那么我们就需要用到form的clean()和clean_field()方法了.以下代码检查密码长度是否大于7位,并且password是否和password2相同:
#myapp/forms.py
fromdjangoimportforms
classMyUserForm(forms.Form):
username=forms.CharField()
password=forms.CharField()
password2=forms.CharField()
defclean_password(self):
password=self.cleaned_data['password']
iflen(password)=7:
raiseforms.ValidationError("passwordinsecure")
returnpassword
defclean():
cleaned_data=super(MyUserForm,self).clean()
password=cleaned_data.get('password','')
password2=cleaned_data.get('password2','')
ifpassword!=password2:
raiseforms.ValidationError("passwordsnotmatch")
returncleaned_data
其中需要注意的是,clean()和clean_field()的最后必须返回验证完毕或修改后的值.
5.模式四,自定义ModelForm中的field
我们会经常遇到在form中需要修改默认的验证,比如一个model中有许多非必填项,但为了信息完整,你希望这些field在填写时是必填的:
#myapp/models.py
fromdjango.dbimportmodels
classMyUser(models.Model):
username=models.CharField(max_length=100)
password=models.CharField(max_length=100)
address=models.TextField(blank=True)
phone=models.CharField(max_length=100,blank=True)
为了达到以上要求,你可能会通过直接增加field改写ModelForm:
#请不要这么做
#myapp/forms.py
fromdjangoimportforms
from.modelsimportMyUser
classMyUserForm(forms.ModelForm):
#请不要这么做
address=forms.CharField(required=True)
#请不要这么做
phone=forms.CharField(required=True)
classMeta:
model=MyUser
请不要这么做,因为这违反"不重复"的原则,而且经过多次的拷贝粘贴,代码会变得复杂难维护.正确的方式应当是利用__init__():
#myapp/forms.py
fromdjangoimportforms
from.modelsimportMyUser
classMyUserForm(forms.ModelForm):
def__init__(self,*args,**kwarg):
super(MyUserForm,self).__init__(*args,**kwargs)
self.fields['address'].required=True
self.fields['phone'].required=True
classMeta:
model=MyUser
值得注意的是,Djangoforms也是Python类,类可以继承和被继承,也可以动态修改.
pip和pip3同时安装Django的问题,建工程怎么指定Python版本
首先当然是安装你需要的两个不同版本的python,这里我安装的是2.7和3.3的,两个版本安装顺序无所谓。
接下来就是检查环境变量,缺少的我们需要添加。先找到环境变量的位置。
在Path环境变量中检查以下4个变量(Path中的环境变量是以分号隔开的):
1.c:\Python27
2.c:\Python27\Scripts
3.c:\Python33
4.c:\Python33\Scripts
少哪个加哪个,注意分号隔开。
然后进入Python2.7安装目录找到如图内容,把python.exe删除。
然后进入python3.3安装目录。找到python.exe程序,把它重命名为python3.exe
最后打开命令行界面测试一下。执行python2命令会进入python2.7的交互环境,执行python3命令会进入python3.3交互环境。
剩下的问题就是pip的问题了。两个python版本分别安装了pip以后怎么区分它们。进入python安装路径找到Scripts文件夹,进入里面找到pip*-script.py,打开修改第一句为你要指定的那个python解释器
标志摩托车django150i怎么关灯标志摩托车django150i的大灯采用常亮设计,行车中大灯是一直亮着的,起到醒目保障安全的目的,它无法关闭。
win7配置好了django,但访问127.0.0.1:8000失败怎么回事需要在CMD命令行下先进入项目根目录,dir看看有没有manage.py这个文件,然后运行项目,Django安装配置之后必须runserver才能在本地访问,命令为:‘pythonmanage.pyrunserver’,如果配置OK的话,会出现下面的提示,表示启动成功:
E:\workspace\python\CMSpython?manage.py?runserver
Performing?system?checks...
System?check?identified?no?issues?(0?silenced).
May?17,?2017?-?08:37:14
Django?version?1.11.1,?using?settings?'CMS.settings'
Starting?development?server?at?
Quit?the?server?with?CTRL-BREAK.
但是如果没有将Python数据导入到默认的数据库SQLite,会出现下面的提示:
E:\workspace\python\CMSpython?manage.py?runserver
Performing?system?checks...
System?check?identified?no?issues?(0?silenced).
You?have?13?unapplied?migration(s).?Your?project?may?not?work?properly?until?you?apply?the?migrations?for?app(s):?admin,?auth,?contenttypes,?sessions.
Run?'python?manage.py?migrate'?to?apply?them.
May?17,?2017?-?08:35:36
Django?version?1.11.1,?using?settings?'CMS.settings'
Starting?development?server?at?
Quit?the?server?with?CTRL-BREAK.
提示信息中已经告诉你应该运行命令“pythonmanage.pymigrate”来创建数据库后,重新使用runserver的命令“pythonmanage.pyrunserver”即可。
当然啦,您无法访问的原因也可能是其他的,如8000端口被占用等问题,可以百度相关问题来解决。
(完)
祝各位朋友身体健康,工作顺利!
结语:以上就是首席CTO笔记为大家介绍的关于Django150怎么检查是翻新车的全部内容了,希望对大家有所帮助,如果你还想了解更多这方面的信息,记得收藏关注本站。