❶ django如何获取上个url(django获取ip地址)
今天给各位分享django如何获取上个url的知识,其中也会对django获取ip地址进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
获取的方法如下:
1、设置或获取整个URL为字符串:window.location.href
2、设置或获取与URL关联的端口号码:window.location.port
3、设置或获取URL的协议部分window.location.protocol
4、设置或获取href属性中跟在问号后面的部分window.location.search
5、获取变量的值(截取等号后面的部分)
6、设置或获取URL的协议部分:window.location.protocol
7、设置或获取href属性中在井号“#”后面的分段:window.location.hash
8、设置或获取location或URL的hostname和port号码:window.location.host
如何python获取sql数据库访问的urlpython
操作数据库,要安装一个Python和数据库交互的包MySQL-python-1.2.2.win32-py2.5.exe,然后我们就可以使用MySQLdb这个包进行数据库操作了。
操作步骤如下:
1、建立数据库连接
import
MySQLdb
conn=MySQLdb.connect(host="localhost",user="root",passwd="sa",db="mytable")
cursor=conn.cursor()
2、执行数据库操作
n=cursor.execute(sql,param)
我们要使用连接对象获得一个cursor对象,接下来,我们会使用cursor提供的方法来进行工作.
这些方法包括两大类:1.执行命令,2.接收返回值
3、cursor用来执行命令的方法:
callproc(self,procname,
args):用来执行存储过程,接收的参数为存储过程名和参数列表,返回值为受影响的行数
execute(self,query,
args):执行单条sql语句,接收的参数为sql语句本身和使用的参数列表,返回值为受影响的行数
executemany(self,query,
args):执行单挑sql语句,但是重复执行参数列表里的参数,返回值为受影响的行数
nextset(self):移动到下一个结果集
4、cursor用来接收返回值的方法:
fetchall(self):接收全部的返回结果行.
fetchmany(self,
size=None):接收size条返回结果行.如果size的值大于返回的结果行的数量,则会返回cursor.arraysize条数据.
fetchone(self):返回一条结果行.
scroll(self,value,
mode='relative'):移动指针到某一行.如果mode='relative',则表示从当前所在行移动value条,如果mode='absolute',则表示从结果集的第一
行移动value条.
5、下面的代码是一个完整的例子.
#使用sql语句,这里要接收的参数都用%s占位符.要注意的是,无论你要插入的数据是什么类型,占位符永远都要用%s
sql="insert
intocdinfovalues(%s,%s,%s,%s,%s)"
#param应该为tuple或者list
param=(title,singer,imgurl,url,alpha)
#执行,如果成功,n的值为1
n=cursor.execute(sql,param)
#再来执行一个查询的操作
cursor.execute("select
*fromcdinfo")
#我们使用了fetchall这个方法.这样,cds里保存的将会是查询返回的全部结果.每条结果都是一个tuple类型的数据,这些tuple组成了一个tuple
cds=cursor.fetchall()
#因为是tuple,所以可以这样使用结果集
cds[0][3]
#或者直接显示出来,看看结果集的真实样子
cds
#如果需要批量的插入数据,就这样做
sql="insert
intocdinfovalues(0,%s,%s,%s,%s,%s)"
#每个值的集合为一个tuple,整个参数集组成一个tuple,或者list
param=((title,singer,imgurl,url,alpha),(title2,singer2,imgurl2,url2,alpha2))
#使用executemany方法来批量的插入数据.这真是一个很酷的方法!
n=cursor.executemany(sql,param)
需要注意的是(或者说是我感到奇怪的是),在执行完插入或删除或修改操作后,需要调用一下conn.commit()方法进行提交.这样,数据才会真正保
存在数据库中.我不清楚是否是我的mysql设置问题,总之,今天我在一开始使用的时候,如果不用commit,那数据就不会保留在数据库中,但是,数据
确实在数据库呆过.因为自动编号进行了累积,而且返回的受影响的行数并不为0.
6、关闭数据库连接
需要分别的关闭指针对象和连接对象.他们有名字相同的方法
cursor.close()
conn.close()
Django操作数据库
django是一个出色的用于python的web框架。django连接有操作数据库的api,使用起来十分简洁。我们在settings.py中配置好所要连接的数据库,然后在moles、view、urls中分别写好业务逻辑
怎么在django中获取URL上的参数
URL='admin/action?name=xxxpwd=xxx'以上格式中,name和pwd是html中表单标记的id,比如一个input的ID。xxx代表一个值,可以是固定,也可以是js获取的input输入框的值等。
请教各位高手Django的url配置问题流线型化(streamlinling)函数导入
1:直接导入视图函数
fromdjango.conf.urls.defaultsimport*
frommysite.viewsimporthello
urlpatterns=patterns('',
(r'^hello/$',hello),
(r'^time/$',time),
)
2:导入包函模块名和函数的客串,而不是函数本身
fromdjango.conf.urls.defaultsimport*
frommysiteimportviews
urlpatterns=patterns('',
(r'^hello/$','views.hello'),
(r'^time/$','views.time'),
)
3:不用导入任何视图内容,写清楚字符串描述
fromdjango.conf.urls.defaultsimport*
urlpatterns=patterns('',
(r'^hello/$','mysite.views.hello'),
(r'^time/$','mysite.views.time'),
)
4:提取一个公共视图前缀
fromdjango.conf.urls.defaultsimport*
urlpatterns=patterns('mysite.views',
(r'^hello/$','hello'),
(r'^time/$','time'),
)
5:partterns()返回对对象的相加
旧:
fromdjango.conf.urls.defaultsimport*
urlpatterns=patterns('mysite.view',
(r'^hello/$','hello'),
(r'^time/$','time'),
(r'^other/$','mysite.others.other'),
)
新:
fromdjango.conf.urls.defaultsimport*
urlpatterns=patterns('mysite.view',
(r'^hello/$','hello'),
(r'^time/$','time'),
)
urlpatterns+=patterns('mysite.others',
(r'^other/$','other'),
)
6:到目前为止,在所有URLconf例子中,我们使用的很简单,即“无命名”正则表达式组,在我们
想要捕获的URL部分加上小括号,django会将捕获的文本作为位置参数传递给视图函数。在更
高级的用法中,还可以使用“命名”正则表达式组来捕获URL,并且将其作为“关键字”参数传给视图。
在python正则表达式中,命名的正则表达式组的语法是(?pnamepattern),这里name是组的名字,而pattern是匹配的某个模式。
下面是一个使用无名组的URLconf的例子:
fromdjango.conf.urls.defaultsimport*
frommysiteimportviews
urlpatterns=patterns('',
(r'^arcticles/(d{4})/$',views.year_archive),
(r'^arcticles/(d{4})/(d{2})/$',view.moth_archive),
)
下面是相同的URLconf,使用命名组进行了重写:
fromdjango.conf.urls.defaultsimport*
frommysiteimportviews
urlpatterns=patterns('',
(r'^arcticles/(?Pyeard{4})/$',veiws.year_archive),
(r'^arcticles/(?Pyeard{4})/(?Pmonthd{2})/$',veiws.month_archive),
)
如果不带命名组,请求/arcticle/2006/03/将会等于这样的函数调用:
month_archive(request,',༿')
而带命名组,同样的请求就是这样的函数调用:
month_archive(request,year=',month=༿')
从中可以看出,使用命名组可以让你的URLconf更加清晰,减少参数次序可能搞混潜在的Bug,
还可以让你的定义中对参数重新排序。
7:视图冗余:
#urls.py
fromdjango.conf.urls.defaultsimport*
frommysiteimportviews
urlpatterns=patterns('',
(r'^(foo)/$',views.foobar_view),
(r'^(bar)/$',views.foobar_view),
)
#views.py
fromdjango.shortcutsimportrender_to_response
frommysite.modelsimportMyModel
deffoobar_view(request,url):
m_list=MyModel.objects.filter(is_new=True)
ifurl=='foo':
template_name='template1.html'
elifurl=='bar':
template_name='template2.html'
returnrender_to_response(template_name,{'m_list':m_list})
利用上面的方法可以减少视图冗余
8:为url里传入固定的参数:
#urls.py
fromdjango.conf.urls.defaultsimport*
frommysiteimportviews
urlpatterns=patterns('',
(r'^foo/$',views.foobar_view,{'template_name':'template1.html'}),
(r'^bar/$',views.foobar_view,{'template_name':'template2.html'}),
)
#views.py
fromdjango.shortcutsimportrender_to_response
frommysite.modelsimportMyModel
deffoobar_view(request,template_name):
m_list=MyModel.objects.filter(is_new=True)
returnrender_to_response(template_name,{'m_list':m_list})
一些URL参数详解:
/mydata/jan/01/
/mydata/jan/02/
/mydata/jan/03/
以上为三个url我们可以用不同的方式实现
1:(r'^mydata/(/w{3})/(/d/d)',views.mydata)mydata(request,'jan',༽')
2:(r'^mydata/(?Pmonth/w{3})/(?Pday/d/d)',view.mydata)mydata(request,month='jan',day=༽')
3:(r'^mydata/birthday/$',views.mydata,{month:'jan',day:༽'})mydata(request,month='jan',day=༽')
9:include导入:
fromdjango.conf.urls.defaultsimport*
urlpatterns=patterns('',
(r'^weblog/',include('mysite.blog.urls')),
(r'^photos/',include('mysite.photos.urls')),
(r'^about/$','mysite.views.about'),
)
10:实例:
验证用户是否登录:
以下是三个视图
defmy_view1(request):
ifnotrequest.user.is_authenticated():
returnHttpResponseRedirect('/accounts/login/')
#...
returnrender_to_response('template1.html')
defmy_view2(request):
ifnotrequest.user.is_authenticated():
returnHttpResponseRedirect('/accounts/login/')
#...
returnrender_to_response('template2.html')
defmy_view3(request):
ifnotrequest.user.is_authenticated():
returnHttpResponseRedirect('/accounts/login/')
#...
returnrender_to_response('template3.html')
以下是对视图进行包装:
defrequires_login(view):
defnew_view(request,*args,**kwargs):
ifnotrequest.user.is_authenticated():#如果用户没有登录,跳转到登录界面
returnHttpResponseRedirect('/accounts/login/')
returnview(request,*args,**kwargs)#否则返回传进来的方法
returnnew_view#返回new_view值:登录视图或者是传进来的视图
以下为URL配置:
fromdjango.conf.urls.defaultsimport*
frommysite.viewsimportrequires_login,my_view1,my_view2,my_view3
urlpatterns=patterns('',
(r'^view1/$',requires_login(my_view1)),
(r'^view2/$',requires_login(my_view2)),
(r'^view3/$',requires_login(my_view3)),
)
DJANGO开发的留言板,如何获取上一页的url?同一个方法,post过来的时候HTTP_REFERER必定是
你可以在用户点击“举报”也就是用get方式访问msg_request方法的时候把HTTP_REFERER放入到hidden类型的表单里面。然后提交到自身
相关代码如下:
defmsg_request(request):
ifrequest.method=='POST':
#这时候处理表单提交过来的obj_url
obj_url=request.POST.get("obj_url","")
form=MsgRequestForm(request.POST)
ifform.is_valid():
wbmessage=Wb(wbtitle=form.cleaned_data['wbtitle'],
wbreason=form.cleaned_data['wbreason'],
wbaddress=obj_url
)
wbmessage.save()
...
#这时候取到的方为举报的url
obj_url=request.META.get('HTTP_REFERER',"/")
return{
"obj_url":obj_url,
...
...
}
然后把obj_url渲染到表单内。
inputtype="hidden"name="obj_url"value="{{obj_url}}"/
Django媒体文件URL的配置在Django中经常需要配置图片、视频等表态文件,在配置时较为复杂,这里纪录一下:
在文件尾部加入以下目录,用于存放上传的文件
在models中写上image字段其中%Y代表年,%m代表月,blank=True代表可以为空。当上传文件时,代表上传到image目录下,以当前年月子目录的文件夹中。
image=models.ImageField(upload_to="image/%Y/%m",blank=True)
其中src中的{{MEDIA_URL}}会在模板中渲染为第一步中的/media/
如果您想在模板中使用{{MEDIA_URL}},请在“模板”的“context_processors”选项中添加django.template.context_processors.media。
通过以上步骤,基本上可以在前端正常渲染出结果了,但还需要给图片添加一个URL以正常显示。
第一行为引入静态文件的serve,第二行为导入工程配置文件中的MEDIA_ROOT
在url中加入:
关于django如何获取上个url和django获取ip地址的介绍到此就结束了,不知道你从中找到你需要的信息了吗?如果你还想了解更多这方面的信息,记得收藏关注本站。
❷ Python的Django和Flask框架的区别
Python的Django和Flask框架的主要区别如下:
功能全面性:
适用场景:
代码简洁性:
社区和生态系统:
选择依据:
综上所述,Django和Flask各有其优势和适用场景,开发者应根据实际需求选择合适的框架。