PDA

View Full Version : کار با دیتابیس در پایتون (طراحی وب با پایتون (CGI) )



mahdi011
یک شنبه 31 فروردین 1393, 13:29 عصر
سلام دوستان عزیز

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

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

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

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

omidhaghi
دوشنبه 01 اردیبهشت 1393, 19:14 عصر
سلام دوستان عزیز

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

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

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

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

mahdi011
دوشنبه 01 اردیبهشت 1393, 20:24 عصر
راستش من از کتاب خانه هایی مثل جنگو یا ... استفاده نمیکنم و کلا خوشم نمیاد که استفاده کنم :D

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

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

omidhaghi
دوشنبه 01 اردیبهشت 1393, 21:23 عصر
راستش نمیدونم منظورتون رو خوب متوجه شدم یا نه ولی فک کنم که پس شما اگر از اون گزینه ها دوست ندارید، میتونید یکی از گزینه های پیش رو، استفاده از ماژولهای urllib و MySQLdb باشه.
شما با این دو ماژول آشناییت دارید؟

mahdi011
سه شنبه 02 اردیبهشت 1393, 05:32 صبح
اره داداش منظورمو خوب متوجه شدی -- کار با ماژول
MySQLdb رو در حد خوب بلدم.
میشه بگی چجوری میشه اطلاعات رو از دیتابیس خوند؟

n.nowroozi
سه شنبه 02 اردیبهشت 1393, 13:39 عصر
اره داداش منظورمو خوب متوجه شدی -- کار با ماژول
MySQLdb رو در حد خوب بلدم.
میشه بگی چجوری میشه اطلاعات رو از دیتابیس خوند؟

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

omidhaghi
چهارشنبه 03 اردیبهشت 1393, 10:42 صبح
اره داداش منظورمو خوب متوجه شدی -- کار با ماژول
MySQLdb رو در حد خوب بلدم.
میشه بگی چجوری میشه اطلاعات رو از دیتابیس خوند؟

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





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



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

mahdi011
چهارشنبه 03 اردیبهشت 1393, 20:43 عصر
داداش خیلی ممنون که داری کمکم میکنی ...
----
مشکلی که داشتم با خوندن اطلاعات در دیتابیس حل شد.
کلیت کار اینه که من میخوام یه فرم بسازم واسه ثبت نام کاربران - بعد میخوام در این فرم اطلاعات وارد شده در دیتابیس ذخیره بشه (تا اینجا مشکلی ندارم)
بعدش میخوام یه صفحه ی مدیریت کاربران بسازم واسه خودم که بتونم مدیریت کنم - با کمترین امکانات - فقط میخوام توی 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
پنج شنبه 04 اردیبهشت 1393, 00:01 صبح
داداش خیلی ممنون که داری کمکم میکنی ...
----
مشکلی که داشتم با خوندن اطلاعات در دیتابیس حل شد.
کلیت کار اینه که من میخوام یه فرم بسازم واسه ثبت نام کاربران - بعد میخوام در این فرم اطلاعات وارد شده در دیتابیس ذخیره بشه (تا اینجا مشکلی ندارم)
بعدش میخوام یه صفحه ی مدیریت کاربران بسازم واسه خودم که بتونم مدیریت کنم - با کمترین امکانات - فقط میخوام توی 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
این یه نمونه بود.
ممنون میشم کمکم کنید.
باتشکر فراوان

این فرمت جدوله
کلا مشکل شما ربطی با پایتون نداره و مربوط به html میشه!
این لینک (http://paste.ubuntu.com/7317271/) رو ببین

mahdi011
پنج شنبه 04 اردیبهشت 1393, 07:59 صبح
داداش واقا ممنون که کمکم کردی ...

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

http://paste.ubuntu.com/7319626

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

http://upcity.ir/images2/53819902739318197452.png (http://upcity.ir/images2/43694815087126181985.png)

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

omidhaghi
پنج شنبه 04 اردیبهشت 1393, 10:34 صبح
داداش واقا ممنون که کمکم کردی ...

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

http://paste.ubuntu.com/7319626

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

http://upcity.ir/images2/53819902739318197452.png (http://upcity.ir/images2/43694815087126181985.png)

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

اوکی
ببین به تعداد ستون های جدولت باید value رو تو حلقه for وارد کنی.
مثلا من اینجا سه تا ستون دارم سه تا دادم بهش.
بعد همینو انجام بدی اوکیه
این لینک (http://paste.ubuntu.com/7320221/) جواب شماست.

mahdi011
پنج شنبه 04 اردیبهشت 1393, 10:58 صبح
داداش واقعا ممنونتم ...
کارم راه افتاد -- ایشالا به هرچی میخوای برسی ...

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

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

omidhaghi
پنج شنبه 04 اردیبهشت 1393, 13:03 عصر
اوه اوه -- داداش به یه مشکل اساسی بر خوردم ...
کلیت کدی که دادی اینجوری شد :
http://paste.ubuntu.com/7320500/
مشکلی که هست اینه که با این کدی که دادید فقط اطلاعات 1 فیلد نشون داده میشه در صورتی که من 6 تا فیلد دارم...
ممنون میشم کمکم کنید ...
باتشکر فراوان :X :X
خوب مگه دستورات sqlرو بلد نیستی؟
باید با دستور where اون id که میخوای رو فیلتر کنی
که یه دونه بده بهت

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

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

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

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

باید از این لینک (http://paste.ubuntu.com/7321134/) استفاده کنید.

mahdi011
پنج شنبه 04 اردیبهشت 1393, 14:05 عصر
داداش واقعا ممنونتم ... (فدایی داری...)

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

omidhaghi
پنج شنبه 04 اردیبهشت 1393, 21:23 عصر
داداش واقعا ممنونتم ... (فدایی داری...)

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

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

mahdi011
پنج شنبه 04 اردیبهشت 1393, 21:47 عصر
نه متاسفانه CSS بلد نیستم که بتونم درستش کنم ...
کد ها رو طبق همون کدی که دادم گزاشتم و نام تیبل ها +‌مشخصات دیتابیس رو عوض کردم.


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

omidhaghi
شنبه 06 اردیبهشت 1393, 14:30 عصر
نه متاسفانه CSS بلد نیستم که بتونم درستش کنم ...
کد ها رو طبق همون کدی که دادم گزاشتم و نام تیبل ها +‌مشخصات دیتابیس رو عوض کردم.


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

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

mahdi011
شنبه 06 اردیبهشت 1393, 15:45 عصر
ممنون داداش ولی میشه یه نمونه بوردر بزارید ؟
باتشکر فراوان

omidhaghi
شنبه 06 اردیبهشت 1393, 22:24 عصر
ممنون داداش ولی میشه یه نمونه بوردر بزارید ؟
باتشکر فراوان
بفرمایید، چرا که نه!
این لینک (http://www.w3schools.com/Tags/tryit.asp?filename=tryhtml_table_border)

sina8167
شنبه 20 اردیبهشت 1393, 15:44 عصر
سلام ... یه سوال داشتم .....اینکه ساده ترین نرم افزاری که بشه پایتون رو به html برسونه یا بهتر بگم در کنار هم کار کنن چیه ... اینطوری بگم که پروژه من ساخت موتور جوستجو هستش کد پایتون رو دارم و همچنین صفحه htmlهم ساختم موندم توی وصل کردن این دو به هم... ممنون میشم جوابمو بدید

mahdi011
شنبه 20 اردیبهشت 1393, 20:13 عصر
سلام

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

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

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

sina8167
شنبه 20 اردیبهشت 1393, 20:32 عصر
مرسی ولی یکم بیشتر راهنمایی میکنی من از پایتون زیاد سر در نمیارم... این پروژه گروهیه که HTML افتاده گردن من.. یعنی این کد تویه پایتون فایل رو فراخوانی میکنه ... توی خود HTML چی ؟ نباید آدرس فایلرو بهش بدم

mahdi011
شنبه 20 اردیبهشت 1393, 20:35 عصر
خواهش میکنم.

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

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

sina8167
شنبه 20 اردیبهشت 1393, 23:17 عصر
منظورم اینه این فایل پایتون مگه نیست ؟ خروجیه پایتون باشه پس 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
یک شنبه 21 اردیبهشت 1393, 12:18 عصر
اگه میخوای اچ تی ام ال بسازی توی پایتون همون لینکی که تو پست قبل قبلی دادم کافیه !

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

omidhaghi
دوشنبه 22 اردیبهشت 1393, 08:36 صبح
منظورم اینه این فایل پایتون مگه نیست ؟ خروجیه پایتون باشه پس 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)




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

http://blog.notdot.net/2011/11/Migrating-to-Python-2-7-part-2-Webapp-and-templates