# زبان های اسکریپتی > دیگر زبان های اسکریپتی >  کار با دیتابیس در پایتون (طراحی وب با پایتون  (CGI) )

## mahdi011

سلام دوستان عزیز 

من دارم کم کم طراحی وب با زبان پایتون رو شروع میکنم ...

میخواستم بدونم وقتی با به دیتابیس وصل میشیم و یه تیبیل با مشخصاتی ایجاد میکنیم , توی صفحات Python+Html چجوری میشه اطلاعات رو از این دیتابیس خوند ؟
مثلا ما یه فرم لاگین میسازیم - توی دیتابیس یه تیبل با اسم login و مقدار یوزرنیم mahdi و پسورد 123456 میسازیم - حالا ما با چه کدی در پایتون میتونیم توی اون صفحه ی لاگین بگیم که اگه یوزرنیم + پسورد وارد شده در صفحه ی لاگین با یوزرنیم و پسورد تیبل login در دیتابیس برابر بود برو به پنل مدیریت ؟

میشه یه نمونه کد بنویسید ؟
باتشکر

----------


## n.nowroozi

کلیتش اینه که یا باید دستورات خام sql رو بنویسی یا با یه orm کار کنی که به شکل پایتونی بتونی کوئری بفرستی. توصیه من به شما اینه که بشینی داکیونت جنگو رو گام به گام بخونی بری جلو 
https://docs.djangoproject.com/en/1.6/intro/tutorial01/

----------


## omidhaghi

> سلام دوستان عزیز 
> 
> من دارم کم کم طراحی وب با زبان پایتون رو شروع میکنم ...
> 
> میخواستم بدونم وقتی با به دیتابیس وصل میشیم و یه تیبیل با مشخصاتی ایجاد میکنیم , توی صفحات Python+Html چجوری میشه اطلاعات رو از این دیتابیس خوند ؟
> مثلا ما یه فرم لاگین میسازیم - توی دیتابیس یه تیبل با اسم login و مقدار یوزرنیم mahdi و پسورد 123456 میسازیم - حالا ما با چه کدی در پایتون میتونیم توی اون صفحه ی لاگین بگیم که اگه یوزرنیم + پسورد وارد شده در صفحه ی لاگین با یوزرنیم و پسورد تیبل login در دیتابیس برابر بود برو به پنل مدیریت ؟
> 
> میشه یه نمونه کد بنویسید ؟
> باتشکر


اول از همه شما با چه ابزاری میخواهید برنامه تحت وب بنویسید؟
گزینه های بسیاری موجود می باشد، نظیر:
۱-جنگو
۲- zope
۳- flask
۴- pyramid
۵- bottle 
.
.
.
ببینید گزینه ها خیلی زیاد هستند.ولی هر کدام خاصیت خود را دارا می باشند. مثلا جنگو از همه کاملتر هست، ولی خیلی سنگینه، و یادگیری آن زمان بر هست. و مثلا flask توی سرعت یا pyramid نه زیاد سنگین و نه زیاد سبک هست.
مبحث ORM یا sql خام و یا nosql هم که فرقی نمیکنه، چون شما حتی میتونی flask رو انتخاب کنی و از ORM جنگو بهره ببری یا از ORM های دیگه یا کلا sql خام...
فقط باید معلوم بشه هدف شما چیه!

----------


## mahdi011

راستش من از کتاب خانه هایی مثل جنگو یا ... استفاده نمیکنم و کلا خوشم نمیاد که استفاده کنم :D

با خود پایتون مینویسم !

یه مثلا میزنم واسه این که بهتر متوجه بشید - یه نفر میاد درون پی اچ پی کد اچ تی ام ال میزاره و کار میکنه ! -- منم با پایتون و دستورای خود html یه صفحه ساختم و نکته ی مهمش اینه که برنامه نویسی داخلش (داینامیک) با خود پایتون هست !

----------


## omidhaghi

راستش نمیدونم منظورتون رو خوب متوجه شدم یا نه ولی فک کنم که پس شما اگر از اون گزینه ها دوست ندارید، میتونید یکی از گزینه های پیش رو، استفاده از ماژولهای urllib و MySQLdb باشه.
شما با این دو ماژول آشناییت دارید؟

----------


## mahdi011

اره داداش منظورمو خوب متوجه شدی -- کار با ماژول MySQLdb رو در حد خوب بلدم.
میشه بگی چجوری میشه اطلاعات رو از دیتابیس خوند؟

----------


## n.nowroozi

> اره داداش منظورمو خوب متوجه شدی -- کار با ماژول MySQLdb رو در حد خوب بلدم.
> میشه بگی چجوری میشه اطلاعات رو از دیتابیس خوند؟


داکیومنتش رو بخون توش با مثال توضیح داده
http://mysql-python.sourceforge.net/MySQLdb.html

----------


## omidhaghi

> اره داداش منظورمو خوب متوجه شدی -- کار با ماژول MySQLdb رو در حد خوب بلدم.
> میشه بگی چجوری میشه اطلاعات رو از دیتابیس خوند؟


ببین اگر هدفتون این باشه که خودتون دستی مراحل لاگین رو بنویسی باید اول از همه یه راهی برای دسترسی پایتون قرار بدی.حالا یا از ماژولهای http یا استفاده از cgi و غیره ... خوب این زیاد برای ما فرق نمیکنه.
ولی برای اینکه بخوای کانسپت لاگین رو خودت بدون استفاده از کتابخونه های موجود بزنی، یکی از راه اینه که موقعی که کاربر یوزر و پسورد رو وارد میکنه ازش بگیری و با شرط برسی کنی که اگر این یوزر موجود بود تو تیبل و اگر پسوردش هم برابر بود اونوقت مجوز لاگین صادر بشه.
که بهتره پسورد هش شده باشه تو دیتا بیس.درضمن اینا مستلزم بلد بودن ماژول MySQLdb که شمام گفتید بلدین.
البته این راهی که گفتم یه راه خیلی ساده و مبتدی و غیر مطمئن هست.
برای خوندن اطلاعات هم query باید طبق زیر باشه:

select username,password from login where user='%s' and password='%s' % (username, password)

بعد اگر دستور بالا مقدار برگردون یعنی درسته.که با if میتونید کنترلش کنید.
امیدوارم بدردت بخوره، ولی اگه توضیح بدی دقیق میخوای چیکار کنی خیلی بهتر بود.

----------


## mahdi011

داداش خیلی ممنون که داری کمکم میکنی ...
----
مشکلی که داشتم با خوندن اطلاعات در دیتابیس حل شد.
کلیت کار اینه که من میخوام یه فرم بسازم واسه ثبت نام کاربران - بعد میخوام در این فرم اطلاعات وارد شده در دیتابیس ذخیره بشه (تا اینجا مشکلی ندارم)
بعدش میخوام یه صفحه ی مدیریت کاربران بسازم واسه خودم که بتونم مدیریت کنم - با کمترین امکانات - فقط میخوام توی 3تا جدول اسم +ایمیل+شماره تلفن کاربر رو نشون بده !

این کد رو نوشتم :


#!/usr/bin/python
#-*- coding: UTF-8 -*-
import MySQLdb

db = MySQLdb.connect("localhost","database_user","!$1#2  @3$!","database_test" )cur = db.cursor()
a='''
'''print "Content-type:text/html\r\n\r\n"print """

<html dir="rtl">

<head>

</head>

<body>

"""cur.execute("SELECT * FROM USER")

rows = cur.fetchall()

for row in rows:

    for col in row:

        print "%s," % col

    print "\n"

db.close()

print "</body>"

print "</html>"




در کد بالا اطلاعات در تیبل USER در دیتابیس نشون داده میشه و مشکلی نداره !
تنها مشکلم اینه که همه ی طلاعات توی 1 خط نشون داده میشه‌!!

میخواستم بدونم چیکار کنم تا واسه هر کاربر یه ID در دیتابیس بسازم و یا کل کاربرا رو به ترتیب : نام-ایمیل-شماره تلفن و کاربر بعد تو خط بعد با همین اطلاعات...

از یکی شنیدم باید استایل بدم اما توی پایتون یاد ندارم....

کلیت مشکلم اینه که نمیدونم چیکار کنم تا اطلاعات داخل تیبل USER همه توی 1 خط نباشه و بنویسه :
1- مهدی mahdi@gmail.com 09330000000
این یه نمونه بود.
ممنون میشم کمکم کنید.
باتشکر فراوان

----------


## omidhaghi

> داداش خیلی ممنون که داری کمکم میکنی ...
> ----
> مشکلی که داشتم با خوندن اطلاعات در دیتابیس حل شد.
> کلیت کار اینه که من میخوام یه فرم بسازم واسه ثبت نام کاربران - بعد میخوام در این فرم اطلاعات وارد شده در دیتابیس ذخیره بشه (تا اینجا مشکلی ندارم)
> بعدش میخوام یه صفحه ی مدیریت کاربران بسازم واسه خودم که بتونم مدیریت کنم - با کمترین امکانات - فقط میخوام توی 3تا جدول اسم +ایمیل+شماره تلفن کاربر رو نشون بده !
> 
> این کد رو نوشتم :
> 
> 
> ...


این فرمت جدوله
کلا مشکل شما ربطی با پایتون نداره و مربوط به html میشه!
این لینک رو ببین

----------


## mahdi011

داداش واقا ممنون که کمکم کردی ...

من کدی که دادی به صورت زیر گزاشتم :

http://paste.ubuntu.com/7319626

اما مشکلش اینه که به جایی که اطلاعات رو نشون بده کد های پایتون واسه دیتابیس رو نشون میده - اینو نشون میده :

http://upcity.ir/images2/53819902739318197452.png

اگه ممکنه این کدی که دادم رو ویرایش کنید و درستش کنید ...
واقعا ممنون....
:X :X

----------


## omidhaghi

> داداش واقا ممنون که کمکم کردی ...
> 
> من کدی که دادی به صورت زیر گزاشتم :
> 
> http://paste.ubuntu.com/7319626
> 
> اما مشکلش اینه که به جایی که اطلاعات رو نشون بده کد های پایتون واسه دیتابیس رو نشون میده - اینو نشون میده :
> 
> http://upcity.ir/images2/53819902739318197452.png
> ...


اوکی
ببین به تعداد ستون های جدولت باید value رو تو حلقه for وارد کنی.
مثلا من اینجا سه تا ستون دارم  سه تا دادم بهش.
بعد همینو انجام بدی اوکیه
این لینک جواب شماست.

----------


## mahdi011

داداش واقعا ممنونتم ...
کارم راه افتاد -- ایشالا به هرچی میخوای برسی ...

----
فقط یه مشکل کوچولوی دیگه هم هست ...
میخوام یه فرم ثبت نام بسازم که وقتی کاربر ثبت نام میکنه اطلاعات در دیتابیس ثبت بشه - تا اینجا مشکلی نداره - میخوام واسه هر کاربر به id بسازم و باید یه جوری باشه که هر بار این id عددش بره بالا تا همه با یه id نباشن ...
ممنون میشم کمکم کنی ...

----------


## mahdi011

اوه اوه -- داداش به یه مشکل اساسی بر خوردم ...
کلیت کدی که دادی اینجوری شد :
http://paste.ubuntu.com/7320500/
مشکلی که هست اینه که با این کدی که دادید فقط اطلاعات 1 فیلد نشون داده میشه در صورتی که من 6 تا فیلد دارم...
ممنون میشم کمکم کنید ...
باتشکر فراوان :X :X

----------


## omidhaghi

> اوه اوه -- داداش به یه مشکل اساسی بر خوردم ...
> کلیت کدی که دادی اینجوری شد :
> http://paste.ubuntu.com/7320500/
> مشکلی که هست اینه که با این کدی که دادید فقط اطلاعات 1 فیلد نشون داده میشه در صورتی که من 6 تا فیلد دارم...
> ممنون میشم کمکم کنید ...
> باتشکر فراوان :X :X


خوب مگه دستورات sqlرو بلد نیستی؟
باید با دستور where اون id که میخوای رو فیلتر کنی
که یه دونه بده بهت

----------


## mahdi011

داداش دستورات sql رو بلدم - فک کنم شما منظورمو نفهمیدید...
من میگم ای کد هایی که دادید رو وقتی میزنم به جای این که همه فیلد هارو نشون بده فقط 1 فیلد رو میاره !
اینم لینک همون فایل :
http://www.fastwebhost.ir/cgi/admin-gold
ببینیدش متوجه میشید.
من میخوام کل فیلد هارو نشون بده ...

ممنون میشم کمکم کنید ...

----------


## omidhaghi

> داداش دستورات sql رو بلدم - فک کنم شما منظورمو نفهمیدید...
> من میگم ای کد هایی که دادید رو وقتی میزنم به جای این که همه فیلد هارو نشون بده فقط 1 فیلد رو میاره !
> اینم لینک همون فایل :
> http://www.fastwebhost.ir/cgi/admin-gold
> ببینیدش متوجه میشید.
> من میخوام کل فیلد هارو نشون بده ...
> 
> ممنون میشم کمکم کنید ...


باید از این لینک استفاده کنید.

----------


## mahdi011

داداش واقعا ممنونتم ... (فدایی داری...)

فقط یه مشکل کوچولو ...
این لینک رو ببین:
http://www.fastwebhost.ir/cgi/admin-gold
اطلاعات درسته و همه فیلد هارو میاره اما مشکلش اینه که بعد از فیلد 1 همه توی 1 خط هستن ...
ممنون میشم کمکم کنید ....
باتشکر فراوان...

----------


## omidhaghi

> داداش واقعا ممنونتم ... (فدایی داری...)
> 
> فقط یه مشکل کوچولو ...
> این لینک رو ببین:
> http://www.fastwebhost.ir/cgi/admin-gold
> اطلاعات درسته و همه فیلد هارو میاره اما مشکلش اینه که بعد از فیلد 1 همه توی 1 خط هستن ...
> ممنون میشم کمکم کنید ....
> باتشکر فراوان...


دقیقا کل کدت چیه؟
بعد از css استفاده نمیکنی؟

----------


## mahdi011

نه متاسفانه CSS بلد نیستم که بتونم درستش کنم ...
کد ها رو طبق همون کدی که دادم گزاشتم و نام تیبل ها +‌مشخصات دیتابیس رو عوض کردم.


ممنون میشم ویرایش کنی تا درست بشه - وافعا ممنون :X

----------


## omidhaghi

> نه متاسفانه CSS بلد نیستم که بتونم درستش کنم ...
> کد ها رو طبق همون کدی که دادم گزاشتم و نام تیبل ها +‌مشخصات دیتابیس رو عوض کردم.
> 
> 
> ممنون میشم ویرایش کنی تا درست بشه - وافعا ممنون :X


به table بوردر بدید حل میشه.
این یکی سوال شما مربوط به طراحی و css میشه و باید تو این زمینه دنبال پاسخ بگردید.
ولی اگر بوردر بدید کارتون حل میشه

----------


## mahdi011

ممنون داداش ولی میشه یه نمونه بوردر بزارید ؟
باتشکر فراوان

----------


## omidhaghi

> ممنون داداش ولی میشه یه نمونه بوردر بزارید ؟
> باتشکر فراوان


بفرمایید، چرا که نه!
این لینک

----------


## sina8167

سلام ... یه سوال داشتم .....اینکه ساده ترین نرم افزاری که بشه پایتون رو به html برسونه یا بهتر بگم در کنار هم کار کنن چیه ... اینطوری بگم که پروژه من ساخت موتور جوستجو هستش کد پایتون رو دارم و همچنین صفحه htmlهم ساختم موندم توی وصل کردن این دو به هم... ممنون میشم جوابمو بدید

----------


## mahdi011

سلام

این که خیلی راحت هست !

به کد زیر نگاه کن :
http://paste.ubuntu.com/7439283/

سوالی بود در خدمتیم

----------


## sina8167

مرسی ولی یکم بیشتر راهنمایی میکنی من از پایتون زیاد سر در نمیارم... این پروژه گروهیه که HTML افتاده گردن من.. یعنی این کد تویه پایتون فایل رو فراخوانی میکنه ... توی خود HTML چی ؟ نباید آدرس فایلرو بهش بدم

----------


## mahdi011

خواهش میکنم.

اگه دقت کنید در وسط های کد تعریف کردیم که این متن html هست و بقیه ی کد های زیر که توی سه کوتیشن هست تا سه کوتیشن اخر html هست ! 

ولی فک نکنم منظورتون رو خوب متوجه شده باشم- لطفا بیشتر راهتمایی کنید

----------


## sina8167

منظورم اینه این فایل پایتون مگه نیست ؟ خروجیه پایتون باشه پس html چطوری بهش وصل بشه آخه صفحه html من آمادست فقط باید به پایتون وصل شه ...آره وسطش کد رو میزاریم ولی خروجی بازم فایل پایتونه....
من چطور میتونم یه صفحه html که یه قرار موتور جستجویی باشه که هسته برنامه ای اون پایتونه رو راه بسازم که خروجی بده ....یعنی روی فایل Html کلیک کنم و کلمه ای رو سرچ کنم و فایل پایتون توی همون صفحه HTML (تویه یه چیزی شبیه لیست باکس ) بهم نمایش بده... من یه نرم افزار پیدا کردم که اسمش Google App Engine هستش ولی موقع اجرا رو سیستمم ارورداره (فقط وقت اجرا )روی یه سیستم دیگه امتحانش کردم انجام داد و پس از اجرا روی صفحه HTML که خودش اتومات باز کرد HELLO WORD رو نوشت و توی کد پایتونش این چیزا رو نداره اینم کد پایتونشه



#!/usr/bin/env python
#
# Copyright 2007 Google Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
import webapp2


class MainHandler(webapp2.RequestHandler):
    def get(self):
        self.response.write('Hello world!')


app = webapp2.WSGIApplication([
    ('/', MainHandler)
], debug=True)

----------


## mahdi011

اگه میخوای اچ تی ام ال بسازی توی پایتون همون لینکی که تو پست قبل قبلی دادم کافیه !

یه کار میشه کرد - شما یه کد از کد هاتو بده + اچ تی ام ال هم بده تا بزارم و بتونی بقیه رو خودت درست کنی

----------


## omidhaghi

> منظورم اینه این فایل پایتون مگه نیست ؟ خروجیه پایتون باشه پس html چطوری بهش وصل بشه آخه صفحه html من آمادست فقط باید به پایتون وصل شه ...آره وسطش کد رو میزاریم ولی خروجی بازم فایل پایتونه....
> من چطور میتونم یه صفحه html که یه قرار موتور جستجویی باشه که هسته برنامه ای اون پایتونه رو راه بسازم که خروجی بده ....یعنی روی فایل Html کلیک کنم و کلمه ای رو سرچ کنم و فایل پایتون توی همون صفحه HTML (تویه یه چیزی شبیه لیست باکس ) بهم نمایش بده... من یه نرم افزار پیدا کردم که اسمش Google App Engine هستش ولی موقع اجرا رو سیستمم ارورداره (فقط وقت اجرا )روی یه سیستم دیگه امتحانش کردم انجام داد و پس از اجرا روی صفحه HTML که خودش اتومات باز کرد HELLO WORD رو نوشت و توی کد پایتونش این چیزا رو نداره اینم کد پایتونشه
> 
> 
> 
> #!/usr/bin/env python
> #
> # Copyright 2007 Google Inc.
> #
> ...


به این دوتا لینک یه سر بزن: بدرد بخوره برای شما
http://webapp-improved.appspot.com/t...templates.html

http://blog.notdot.net/2011/11/Migra...-and-templates

----------

